使用Edge从file:///访问Web服务失败

时间:2018-12-05 15:06:59

标签: c# typescript fetch-api

我尝试访问用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", "*");

我收到并登录到控制台的错误看起来像这样 enter image description here

我不知道如何解决此问题。 Chrome没有在做什么Edge?如何从Edge访问我的Web服务?

仅供参考

  1. 该Web服务是带有Owin的C#独立应用程序
  2. 从“ file:/// ...”的访问是该项目的必备项

1 个答案:

答案 0 :(得分:0)

有可能localhostfile:/// URL被分类在两个不同的安全区域中。例如,如果一个是Internet,另一个是Intranet,则跨域请求将被阻止。

在Edge中使用这些安全区域的另一种可能性是,如果您的页面在一个区域中进行分类,则会应用不同的安全策略,该策略可能会有所限制。

如果您在其他浏览器中进行了本地测试,则对托管的测试实例进行跨浏览器测试可能会更简单,因此其行为类似于真实世界。