托管在服务器A和休息服务(WebAPI)中的我的Web应用程序(ASP.NET MVC5)托管在服务器B中。当应用程序通过IE11访问WebAPI时,它工作正常但在chrome中,我收到错误消息不存在access-control-allow-origin标头
在谷歌搜索之后,我在WebAPI的Web.config中添加了这个
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
以下一个在客户端调用
var config = {
headers: {
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Credentials': true,
'X-Requested-With': 'XmlHttpRequest'
}
};
$http.get(url, config).success(function (data) {
var filteredData = data;
})
现在我收到了授权错误 XMLHttpRequest无法加载(URL)无效的HTTP状态代码401
另外我还有一个问题,为了克服CORS错误,我们是否只需要在客户端或服务器端添加信息,或者两者都需要?
答案 0 :(得分:0)
您不需要在客户端请求中进行任何特定的CORS配置。浏览器(Chrome,在您的情况下)应该发送正确的标题。
编辑:如果您是服务器端的支持凭据(请参阅下面的注释),那么您需要在ajax请求中包含以下内容:
xhrFields: { withCredentials: true }
对于服务器端,我建议安装Microsoft.AspNet.WebApi.Cors NuGet包,然后按these configuration instructions。特别是,请参阅this section,其中说明了如何为应用程序中的所有Web API控制器启用每个操作,每个控制器或全局的CORS。
例如:
[EnableCors(origins: "http://www.example.com", headers: "*", methods: "*")]
public HttpResponseMessage GetItem(int id) { ... }
如果您要使用值为Access-Control-Allow-Credentials
的{{1}}标头,则true
标头不能为Access-Control-Allow-Origin
。必须将其设置为一个或多个特定域。