• WebApi系列~开放的CORS,跨域资源访问对所有人开放


    回到目录

    之前有客户问我,如何AJAX跨域post,这个问题挺有意思,在我们看来,我是不被允许的,因为它是不安全的,但随着web api的火热,这个东西也被人们一步步的接受了,确实,有时,我们的接口希望对所有人公开,它并不在乎有人恶意去POST灌数据,呵呵!

    实现思路:向HTTP请求头添加跨域标识Access-Control-Allow-Origin,将它的值设为*即可,当然如果你一个个页面去加那就太麻烦了,也不推荐,有一天老总感觉这是不安全的了,让你去掉它,只你可就麻烦大了,哈哈,所以,还有找个全局点吧!

    开放的CORS过滤器,只对类开放,不支持方法单独设置

        /// <summary>
        /// 开放cors协议,支持跨域访问
        /// </summary>
        [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
        public class OpenCorsAttribute : ActionFilterAttribute
        {
            /// <summary>
            /// 开放cors协议,支持跨域访问的初始化
            /// </summary>
            public OpenCorsAttribute()
            {
            }
    
            /// <summary>
            ///在action渲染之前
            /// </summary>
            /// <param name="filterContext"></param>
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
    
                var responseHead = filterContext.RequestContext.HttpContext.Response.Headers;
                if (responseHead != null)
                {
                    responseHead.Add("Access-Control-Allow-Origin", "*");
                }
                base.OnActionExecuting(filterContext);
    
    
            }
        }

    使用它也非常简单

       [OpenCorsAttribute]
        public class HomeController : AsyncController
        {
     }

    而如果希望所有控制器都添加这个特性,可以在FilterConfig类中去添加全局过滤器

     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new OpenCorsAttribute());
                filters.Add(new GlobalErrorAttribute());
                filters.Add(new HandleErrorAttribute());
                filters.Add(new UrlRuleFilterAttribute());
            }

    这样,你所有的Action也被破加上了这个特性,当然,如果你手动向Action上这是不被允许的,因为我们设置了AttributeUsage(AttributeTargets.Class),呵呵

    程序截图

     回到目录

  • 相关阅读:
    dedecmsV5.7和discuz!X3.4整合之后免激活登陆
    dedecms织梦文章微信分享带缩略图与简介
    关于PHP的mkdir函数
    关于discuz的fap.php 漏洞问题
    discuzX3.4安装之后,没有任何样式怎么办?
    阿里云 RDS for MySQL支持什么引擎
    PHP随机生成要求位数个字符(大小写字母+数字)
    PHP json_decode为什么将json字符串转成数组是对象格式?
    PHP实用的功能函数
    css实现三角形图标
  • 原文地址:https://www.cnblogs.com/lori/p/4519809.html
Copyright © 2020-2023  润新知