ASP.NET将CORS标头添加到ASHX文件处理程序中



使用WebAPI获得了C#.NET MVC解决方案。现在,我已经设置了OWIN和CORS(用于基于令牌的身份验证(,所有这些都按预期工作。

我还配置了一个文件处理程序:file.ashx,处理程序在本地完美工作。问题是,当我从另一个来源(通过AJAX客户端呼叫(向处理程序发送请求时,我会收到folliwing错误:

xmlhttprequest无法加载http://localhost:1234/handlers/file.ashx。对飞行前请求的响应不会传递访问控制检查:在请求的资源上没有"访问控制"标头。因此,不允许访问原点'http://localhost:1234'。响应具有HTTP状态代码405。

现在,当浏览器发送选项请求时,很明显访问控制标头未返回客户端。

介绍以下链接:标头未设置为选项AJAX请求,这表明我通过处理程序本身返回适当的标题。

但是,当调试时,我注意到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");
    }

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

请注意,我只想在WebAPI(已经在工作(和我的文件处理程序上enbale cors。

我还发现,如果您是通过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文件

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

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