回到目錄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