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实现跨域支持;

提示:通过修改跨域过滤器的配置,可使其支持控制器;

posted @ 2022-02-28 17:04  李文学  阅读(92)  评论(0)    收藏  举报