c# - 使用 Edge 从 file:/// 访问 Web 服务失败
问题描述
我尝试访问我用 C# 编写的 Web 服务。我通过 Typescript 和 fetch-api 访问它。该访问在 Chrome 和 Firefox 中完美运行,但在 Edge 中却没有。我已经用 POST 和 GET 尝试过,但在 Edge 中都失败了。
Typescript/js/html 从磁盘本地运行!所以我的浏览器地址字段看起来有点像这样: file:///C:/Users/.../WebServiceConsumer/view/index.html
访问 Web 服务的 Typescript 方法如下所示
getData(url:string, token?:string): Promise<any>{
let headers:Headers = new Headers({"Content-Type": "application/json"});
if (token) {
headers.set("Authorization", 'Bearer '+ token);
}
return fetch(url, {
method: "GET", // *GET, POST, PUT, DELETE, etc.
mode: "cors", // no-cors, cors, *same-origin
cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
credentials: "same-origin", // include, *same-origin, omit
headers: headers,
redirect: "follow", // manual, *follow, error
referrer: "no-referrer", // no-referrer, *client
})
.then(response => response.json()
.then(json => {return json}))
.catch(error => console.log('error:', error));; // parses response to JSON
}
我试图访问的方法看起来像这样
public class SearchController : ApiController
{
[HttpGet]
[Route("api/v1/Search/Test")]
public IHttpActionResult Get()
{
return Ok("OK");
}
}
我已经在我的 C# 代码中设置了 CORS 策略
res.Headers.Set("Access-Control-Allow-Origin", "*");
我不知道如何解决这个问题。Edge 做了哪些 Chrome 没有做的事情?如何从 Edge 访问我的网络服务?
供参考
- 该网络服务是一个带有 Owin 的 C# 独立应用程序
- 来自“file:///...”的访问是这个项目的必备条件
解决方案
localhost
和URL可能file:///
被分类在两个不同的安全区域中。比如一个是internet,一个是intranet,那么跨域请求就会被阻塞。
Edge 中这些安全区域的另一种可能性是,如果您的页面被分类在一个区域中,它会应用不同的安全策略,这可能或多或少具有限制性。
如果您在另一个浏览器中对其进行本地测试,则针对托管测试实例进行跨浏览器测试可能会更简单,因此它的行为就像现实世界一样。
推荐阅读
- google-apps-script - Google Apps Script Web App 可以扩展吗?
- .net - .net Janus Gridex,添加多个子行,关注第一行
- javascript - 逗号分隔数字的正则表达式,每个逗号后面可能有 n 个空格
- c - free() 给了我一个错误,从聊天到无效的对话无效
- python - 在python中删除文件名的结尾
- typescript - 如何有条件地设置可选属性
- angular - 如何使用 [innerHtml] Angular 2 绑定到样式属性?
- regex - 如何在点之前只匹配 2 位数字,在点之后只匹配一位或两位数字
- heroku - 如果我在 Heroku 上拥有超过 5 个应用程序,我需要付费吗?
- javascript - 如何使用委托从本地存储中删除项目?