文章出處

回到目錄

之前有客戶問我,如何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),呵呵

程序截圖

 回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()