Asp.net WebAPI 中使用一般处理程序处理跨域问题
项目中,使用一般处理程序esri proxy.ashx进行请求转发,获取GIS资源。项目中,使用Authorization请求头进行权限控制。因此,在esri进行请求转发时,报跨域错误。
1.代理转发的请求,未进入ProcessRequest()方法即报跨域错误。问AI,AI给的意见为:
当浏览器发送
OPTIONS
请求时,IIS 或 ASP.NET 可能 未正确路由到你的IHttpHandler
,导致:
OPTIONS
请求被 IIS 拦截(未交给你的代码处理)
web.config
缺少对OPTIONS
方法的支持Handler 未正确注册
AI给的解决方案为在web.config中增加如下配置:
<system.webServer><handlers><add name="ProxyHandler" path="proxy.ashx" verb="GET,POST,PUT,DELETE,OPTIONS" type="GRSH.KSWERegister.Web.proxy, GRSH.KSWERegister.Web" resourceType="Unspecified" /></handlers><modules runAllManagedModulesForAllRequests="true" /><httpProtocol><customHeaders><!-- 可选:全局 CORS 设置 --><add name="Access-Control-Allow-Origin" value="*" /><add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /><add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /></customHeaders></httpProtocol>
</system.webServer>
2.一般处理程序中,增加如下代码:
if (context.Request.HttpMethod == "OPTIONS")
{context.Response.StatusCode = 200;context.Response.End();return;
}
经过如此配置,即可实现proxy.ashx支持Authorization请求头