WebApi 2 Cors不工作。

时间:2015-12-14 13:05:50

标签: jquery ajax asp.net-web-api cors

我已经经历过了 Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3  但没有一个答案/建议似乎对我的设置有所帮助。

Applicaiton Architecture:

  1. 服务:WebApi2公开api / reports / list路由,以便客户获取可用报告列表。
  2. 客户端:Web表单前端(遗留系统),它使用jQuery ajax使用上述web-api路由获取报告列表。
  3. IIS配置:

    客户端主要仅由业务用户访问。访问权限仅来自公司网络。客户端通过Windows身份验证仅验证用户。这是驱动其余权限的原因。这绝不可能改变。

    为了确保webapi能够以合适的方式设置正确的用户。身份验证/ Windows身份验证已启用。休息一切都被禁用了。

    不,有效:

    WebApis在本地托管(localhost:86)。 (对于这种失败的情况,这不需要改变。需要修复api,以便尊重对localhost的跨域请求。)

    当客户端在本地托管(localhost:82),并且reportsHome.aspx页面的脚本对locahost:86 / api / reports / list进行$ .ajax调用时,报告列表就会出现。

    到目前为止很好。

    然后我们需要将客户端推送到我们的dev服务器,由于Cors尚未实现,因此由于预先设置不足而导致这个$ .ajax调用失败。

    所以我们按照http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

    的说明继续实施CORS

    我的快速设置角色设置如下所示

      public static void Register(HttpConfiguration config)
        {
    
            var cors = new EnableCorsAttribute(
            origins: "*",
            headers: "*",
            methods: "*");
            cors.SupportsCredentials = true;
            config.EnableCors(cors);
    

    没有什么太花哨的,只允许每个人现在访问。我打算稍后将配置移到webconfig。

    CORS设置后的问题:

    所以,设置完毕后,localhost:82 /仍然正常。 然而开发服务器:82 /仍然没有工作。想象CORS飞行前飞行失败了401

    Response    HTTP/1.1 401 Unauthorized
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Server  Microsoft-IIS/7.5
    WWW-Authenticate    Negotiate
    WWW-Authenticate    NTLM
    X-Powered-By    ASP.NET
    Date    Mon, 14 Dec 2015 12:02:01 GMT
    Content-Length  6315
    

    通过返回所需的标头以验证CORS预检

    来解决此问题
    protected void Application_BeginRequest(object sender, EventArgs e)
            {
                Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
                if ((Context.Request.Path.Contains("api/") || Context.Request.Path.Contains("odata/")) &&
                    Context.Request.HttpMethod == "OPTIONS")
                {
                    Context.Response.AddHeader("Access-Control-Allow-Headers",
                        "Origin, X-Requested-With, Content-Type, Accept,MaxDataServiceVersion");
                    Context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
                    Context.Response.AddHeader("Access-Control-Allow-Credentials", "true");
                    Context.Response.End();
                }
    
            }
    

    这修复了CORS预飞行问题,并允许后续的GET / POST请求。但是现在, THE ISSUE 是来自dev-server的GET / POST请求:82 /)正在返回401.2

    Response    HTTP/1.1 401 Unauthorized
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Server  Microsoft-IIS/7.5
    Access-Control-Allow-Origin *
    WWW-Authenticate    Negotiate
    WWW-Authenticate    NTLM
    X-Powered-By    ASP.NET
    Date    Mon, 14 Dec 2015 12:56:27 GMT
    Content-Length  6343
    

    来自localhost:82的任何请求仍然没问题。那里没有问题。

    任何帮助解决这些问题,指出我错过或做错了什么,非常感谢。

    谢谢,

0 个答案:

没有答案