Mvc5-Web跨域支持
本文记录下基于Mvc5,Mvc6下面得跨域定向配置支持;
准备配置项
<!--第三方系统访问和燕路系统跨域配置(逗号分隔)-->
<add key="CrosDomain" value="hytd.bim003.cn,localhost,192.168.1.190" />
1.新增跨域过滤器
/// <summary> /// 跨域配置 /// </summary> public class TyAllowCrossSiteAttribute : ActionFilterAttribute { private string[] _domains; public TyAllowCrossSiteAttribute() { _domains = new string[] { BootstrapHelper.CrossDomain }; } public TyAllowCrossSiteAttribute(string domain) { _domains = new string[] { domain }; } public TyAllowCrossSiteAttribute(string[] domains) { _domains = domains; } public override void OnActionExecuting(ActionExecutingContext filterContext) { var context = filterContext.RequestContext.HttpContext; var host = context.Request.Url?.Host; if (host != null && _domains.Any(c => c.Contains(host))) { filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*"); } base.OnActionExecuting(filterContext); } }
2.新增跨域配置解析
/// <summary> /// IOC容器注册 /// </summary> public class BootstrapHelper { /// <summary> /// 第三方跨域配置 /// </summary> /// <returns></returns> public static string CrossDomain { get { return ConfigHelper.GetAppSetting("CrosDomain"); } } }
3.注册跨域解析器
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new TyAllowCrossSiteAttribute()); } }
4.使用跨域过滤器
[NoLoginCheck] [TyAllowCrossSite()] public ActionResult GlsLogin(string loginName, string actionType) { // }
通过以上配置就可以实现对特定Action实现跨域支持;
提示:通过修改跨域过滤器的配置,可使其支持控制器;