文章出處
文章列表
之前有客戶問我,如何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),呵呵
程序截圖
文章列表
全站熱搜