标头无法使用跨域传入 ajax
Posted
技术标签:
【中文标题】标头无法使用跨域传入 ajax【英文标题】:Header can't pass in ajax using cross domain 【发布时间】:2017-11-14 01:33:05 【问题描述】:我为我的网站使用了两个项目。一个用于 Mvc 项目和 Api 项目。 我在 Api 项目中的 web.config 文件中添加了以下代码,
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Api项目中的Action方法如下,
[HttpPost]
[Route("api/ajaxapi/caselistmethod")]
public List<CaseValues> AjaxCaseListMethod()
List<CaseValues> caseList = new List<CaseValues>();
return caseList;
在 Mvc 项目中的 ajax 调用如下,
$.ajax(
type: "POST",
url: "http://localhost:55016/api/ajaxapi/caselistmethod",
beforeSend: function (request)
request.setRequestHeader("Authorization", getCookie("Token"));
,
success: function (response)
);
但仍显示如下错误,
选项http://localhost:55016/api/ajaxapi/caselistmethod 405(不允许的方法) XMLHttpRequest 无法加载 http://localhost:55016/api/ajaxapi/caselistmethod。预检响应包含无效的 HTTP 状态代码 405
但没有 Header 可以正常工作。我还需要传递标题。所以请给点建议。
谢谢...
【问题讨论】:
【参考方案1】:options方法需要开启options的pre-flight请求才能成功,这又需要发送授权头。
目前尚不清楚您是如何在 Web.Config 中启用标头或您使用什么来托管您的服务,因此很难提出确切的解决方案。如果您使用 IIS,请查看 - enabling cross-origin resource sharing on IIS7 以确保 OPTIONS 未被 IIS 阻止。您可能需要删除现有的处理程序或启用 OPTIONS。
或者,您可以在方法上使用 EnableCors 属性来允许为该路由启用“选项”。
【讨论】:
终于找到了解决方案,你节省了我的时间。谢谢@Alexei【参考方案2】:Chrome 将发送一个预检请求(OPTIONS
方法)来查找 CORS 标头,然后发送 POST 请求。
但您不允许使用 OPTION
方法。
试试
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
【讨论】:
我不相信Access-Control-Allow-Methods
会影响 OPTIONS 请求本身的 405。您不需要将“OPTIONS”添加到此列表中,因为它不太可能进行 OPTIONS 跨域调用(飞行前 OPTIONS 调用不被浏览器视为“跨域”,因为它是由浏览器本身而不是客户端代码进行的)
在允许 OPTIONS 方法后也没有任何反应。 @S.Dev以上是关于标头无法使用跨域传入 ajax的主要内容,如果未能解决你的问题,请参考以下文章