MVC 5控制器中没有自定义/授权标头

时间:2018-11-02 11:33:55

标签: ajax asp.net-mvc http-headers

我有一个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中的值出现,但是当像键一样使用时,它们都为空。

我缺少哪一部分?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题-但这可能会解决您的问题

  1. 从NuGet安装Microsoft.AspNet.WebApi.Cors-运行此命令 (Install-Package Microsoft.AspNet.WebApi.Cors) 管理器控制台-这将安装您的Cors

  2. 从您的Web.config文件中删除访问允许源代码

  3. 如果是Web Api,请在您的WebApiConfig.cs中添加以下编码,否则请尝试在Gloabl.asax

  4. 中添加

var cors = new EnableCorsAttribute("*", "*", "*", "*"); config.EnableCors(cors);

您会想知道该方法EnableCors()会在哪里using System.Web.Http.Cors;出现在您的用法中并显示这一行

这可能会解决您的问题-最后,尝试使用 WebApi

来从其他域访问MVC控制器不是一个好主意。

如果您想访问MVC控制器,请尝试使用同一域的ajax代码 因为WebApi是无状态的,但是MVC是一种会话-感谢编码愉快!!