WebApi系列~开放的CORS,跨域资源访问对全部人开放

回到目录html

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

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

开放的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类中去添加全局过滤器cors

 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),呵呵ide

程序截图post

 回到目录spa

相关文章
相关标签/搜索