最近被跨域问题搞得焦头烂额,在前端ajax往服务器端发送请求的时候,我尝试在请求报文header里面自定义请求头:
$.ajax({
type: "GET",
url: 'http://localhost:49420/api/v1/User/GetById?id=1',
dataType: "json",
headers: {
AppKey: "fasdf2236afasdZ98",
Sign: "6930718a6a0395349c20b9b409a52c72"
},
success: function(data, status) {
},
error: function(error) {
}
});
后端服务器:
IEnumerable<string> appKeys;
if (!actionContext.Request.Headers.TryGetValues("AppKey",out appKeys))
{
return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized)
{
Content = new StringContent("报文头中的AppKey为空")
};
}
可是本来以为这样写没问题,可是浏览器端一直给我返401:Unauthorized错误,并且提示 已拦截跨源请求:同源策略禁止读取远程资源。(原因:CORS 请求未能成功)
各种方法尝试了,未果。。。。
之后发现是服务器端未验证通过客户端的methods,需要在AuthorizationFilter过滤器的最开始,验证请求报文的方法是不是options,如果不是直接打回,是的话返回200:Accepted,然后进行后面AuthorizationFilter的验证。
string method = actionContext.Request.Method.ToString()