我有一个MVC 5 ViewController,它不接受来自Ajax调用的标头。 Ajax呼叫源是不同于控制器的网站。
Ajax调用看起来像:
window.jQuery.ajax({
url: 'http://localhost:54155/TestView',
headers: {'Authorization': 'token'},
cache: false,
contentType: 'application/json; charset=utf-8',
method: 'Get',
dataType: 'json',
data: {}
}).success(alert('succes?'))
.error(alert('failed'))
});
在控制器端启用了Cors:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Headers" value="*"/>
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
</customHeaders>
</httpProtocol>
我正在尝试到达此控制器:
public class TestViewController : Controller
{
public ActionResult Index()
{
var keys = Request.Headers.AllKeys;
return View();
}
}
如果我将请求发送到基于WEP API 2控制器的WebApi,则标头正常。如果我用邮递员向mvc控制器发送请求,则标头也可以。
标头包含标头Access-Control-Request-Headers,标头具有授权值。但是Request.Headers [“ Authorization”]为空。
诸如X-MyHeader之类的自定义标头作为Access-Control-Request-Headers中的值出现,但是当像键一样使用时,它们都为空。
我缺少哪一部分?
答案 0 :(得分:0)
我遇到了同样的问题-但这可能会解决您的问题
从NuGet安装Microsoft.AspNet.WebApi.Cors
-运行此命令
(Install-Package Microsoft.AspNet.WebApi.Cors
)
管理器控制台-这将安装您的Cors
从您的Web.config
文件中删除访问允许源代码
如果是Web Api,请在您的WebApiConfig.cs
中添加以下编码,否则请尝试在Gloabl.asax
var cors = new EnableCorsAttribute("*", "*", "*", "*");
config.EnableCors(cors);
您会想知道该方法EnableCors()
会在哪里using System.Web.Http.Cors;
出现在您的用法中并显示这一行
这可能会解决您的问题-最后,尝试使用 WebApi
来从其他域访问MVC控制器不是一个好主意。如果您想访问MVC控制器,请尝试使用同一域的ajax代码 因为WebApi是无状态的,但是MVC是一种会话-感谢编码愉快!!