我尝试访问用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", "*");
我不知道如何解决此问题。 Chrome没有在做什么Edge?如何从Edge访问我的Web服务?
仅供参考
答案 0 :(得分:0)
有可能localhost
和file:///
URL被分类在两个不同的安全区域中。例如,如果一个是Internet,另一个是Intranet,则跨域请求将被阻止。
在Edge中使用这些安全区域的另一种可能性是,如果您的页面在一个区域中进行分类,则会应用不同的安全策略,该策略可能会有所限制。
如果您在其他浏览器中进行了本地测试,则对托管的测试实例进行跨浏览器测试可能会更简单,因此其行为类似于真实世界。