重写Controller Initialize方法
protected override void Initialize(System.Web.Routing.RequestContext requestContext) {
if (requestContext.HttpContext.Response != null) {
//跨域支持
var host = requestContext.HttpContext.Request.Headers["Host"];
var Requestorigin = requestContext.HttpContext.Request.Headers["Origin"];
var origin = "*";
origin = Requestorigin;
if (string.IsNullOrEmpty(origin) && !string.IsNullOrEmpty(host))
origin = "http://" + host;
var originUrl = requestContext.HttpContext.Request.Url;
if (origin == "*" && originUrl != null)
origin = $"{originUrl.Scheme}://+{originUrl.Authority}";
requestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", origin);
requestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
requestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Headers", "Content-Type");
requestContext.HttpContext.Response.AppendHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
}
//拦截OPTIONS,返回200状态
if (requestContext.HttpContext.Request.HttpMethod == "OPTIONS") {
requestContext.HttpContext.Response.StatusCode = 200;
requestContext.HttpContext.Response.End();
return;
}
base.Initialize(requestContext);
}
本文介绍了一种在Controller中重写Initialize方法以实现跨域支持和处理OPTIONS请求的方法。通过设置响应头来允许特定或所有源进行跨域请求,并针对OPTIONS请求返回200状态,以支持预检请求。
200

被折叠的 条评论
为什么被折叠?



