首页 > 解决方案 > 使用 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 访问我的网络服务?

供参考

  1. 该网络服务是一个带有 Owin 的 C# 独立应用程序
  2. 来自“file:///...”的访问是这个项目的必备条件

标签: c#typescriptfetch-api

解决方案


localhost和URL可能file:///被分类在两个不同的安全区域中。比如一个是internet,一个是intranet,那么跨域请求就会被阻塞。

Edge 中这些安全区域的另一种可能性是,如果您的页面被分类在一个区域中,它会应用不同的安全策略,这可能或多或少具有限制性。

如果您在另一个浏览器中对其进行本地测试,则针对托管测试实例进行跨浏览器测试可能会更简单,因此它的行为就像现实世界一样。


推荐阅读