【问题标题】:ASP.NET Add CORS headers to ashx File HandlerASP.NET 将 CORS 标头添加到 ashx 文件处理程序
【发布时间】:2017-11-09 02:48:38
【问题描述】:

我有一个带有 WebApi 的 C# .NET MVC 解决方案。 现在我已经设置了 Owin 和 CORS(用于基于令牌的身份验证)并且一切都按预期工作。

我还配置了一个文件处理程序:File.ashx,并且该处理程序在本地完美运行。 问题是,当我从另一个 Origin(通过 AJAX 客户端调用)向处理程序发送请求时,出现以下错误:

XMLHttpRequest 无法加载 http://localhost:1234/Handlers/File.ashx。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost:1234' 不允许访问。响应的 HTTP 状态代码为 405。

现在,当浏览器发送 OPTIONS 请求时,很明显没有将访问控制标头返回给客户端。

我查看了以下链接: Header not being set for OPTIONS Ajax request 这表明我通过处理程序本身返回适当的标头。

但是在调试时我注意到ProcessRequest 方法甚至没有被命中。

if (context.Request.HttpMethod == "OPTIONS")
    {
        context.Response.AddHeader("Access-Control-Allow-Origin", "*");
        context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
        context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
    }

我的问题是我在哪里控制/拦截 OPTIONS 请求并返回适当的标头?

请注意,我只想在 WebApi(已经在工作)和我的文件处理程序上启用 CORS。

【问题讨论】:

    标签: .net asp.net-mvc c#-4.0 cors asp.net-web-api2


    【解决方案1】:

    对于任何想知道如何解决此问题的人:

    在 Global.asax.cs 构造函数中向 BeginRequest 添加一个事件处理程序,并根据您的请求在那里处理您的响应标头。

    【讨论】:

      【解决方案2】:

      我还刚刚发现,如果您是从 Visual Studio 运行项目并进行调试,则需要以管理员身份启动您的 Visual Studio。

      您应该确保使用 ProcessRequest 方法

      1)

           context.Response.AddHeader("Access-Control-Allow-Origin", "*");
           context.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
           context.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
      

      2) web.config文件

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 2011-11-16
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多