2017-06-12 36 views
5

我已经为我的网站使用了两个项目。一个用于Mvc项目和Api项目。 我已经添加下面的web.config文件是在API项目的代码,使用跨域的标题无法通过ajax

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 

操作方法如下这是在API项目,

[HttpPost] 
[Route("api/ajaxapi/caselistmethod")] 
public List<CaseValues> AjaxCaseListMethod() 
{ 
      List<CaseValues> caseList = new List<CaseValues>(); 
      return caseList; 
} 

和Ajax调用,如下是在MVC项目,

$.ajax({ 
      type: "POST", 
      url: "http://localhost:55016/api/ajaxapi/caselistmethod", 
      beforeSend: function (request) { 
       request.setRequestHeader("Authorization", getCookie("Token")); 
      }, 
      success: function (response) { 
      } 
}); 

但尚未显示如下错误,

OPTIONS http://localhost:55016/api/ajaxapi/caselistmethod 405(方法不允许) XMLHttpRequest无法加载http://localhost:55016/api/ajaxapi/caselistmethod。预检的响应具有无效的HTTP状态代码405

但没有标题其工作正常。我还需要传递标题。所以请给出任何建议。

谢谢...

回答

3

选项方法需要在“选项”飞行前的请求成功,而这又需要发送授权头被启用。

目前尚不清楚您如何在Web.Config中启用标头,或者您使用什么来托管您的服务,因此很难提出确切的解决方案。如果您正在使用IIS检出 - enabling cross-origin resource sharing on IIS7以确保OPTIONS未被IIS阻止。您可能需要删除现有的处理程序或启用选项。

或者,您可以在该方法上使用EnableCors属性以允许为该路线启用“选项”。

+0

最后得到了解决方案,你救了我的时间..感谢@Alexei –

1

Chrome会发送预检请求(OPTIONS方法)来查找CORS标头,然后发送POST请求。

但是你不允许OPTION方法。

尝试

Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
+1

我不相信'接入控制允许Methods'影响405从OPTIONS请求本身。您不需要将“OPTIONS”添加到此列表中,因为不太可能使OPTIONS跨域呼叫(在浏览器之前,OPTIONS呼叫不被视为“跨域”,因为它是由浏览器本身而非客户端代码构成的) –

+0

允许OPTIONS方法后也不会发生任何事情。 @ S.Dev –