使用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构造函数中添加一个事件处理程序,并根据您的请求操纵您的响应标头。