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

相關文章
相關標籤/搜索