.net - ASP.NET 将 CORS header 添加到 ashx 文件处理程序

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

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

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

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

现在,当浏览器发送 OPTIONS 请求时,很明显访问控制 header 不会返回给客户端。

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

但是在调试时我注意到 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 请求并返回适当的 header ?

请注意,我只想在 WebApi(已经在工作)和我的文件处理程序上启用 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文件

关于.net - ASP.NET 将 CORS header 添加到 ashx 文件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417904/

相关文章:

c# - 如何在 asp.net webform 中获取 js POST?

.net - 对一个 DataGridView 列使用两个不同 DataRow.Columns 的值

.net - 信号量超时时间

asp.net - 单击按钮时触发的所有页面级事件是什么?

.net - MsBuild 无法解析 MsBuildMajorVersion

asp.net-mvc - 如何重写 Html.ActionLink?

c# - 重定向网址不正确

javascript - 使用 jquery 和 FileResult 更改图像的 src

jquery - 具有多格式 View 的MVC 3中的Ajax发布

wpf - 工作簿在 Excel 2010 中移动后 ElementHost 不刷新