這段時間接手了一個新需求,將一個ASP.NET MVC項目改爲先後端分離項目。前端使用Vue,後端則是使用ASP.NET WebApi。在搭建完成先後端框架後,進行接口測試時發現了一個先後端分離廣泛存在的問題跨域(CORS)請求問題。所以就有了這篇文章如何啓用ASP.NET WebApi 中的 CORS 支持。前端
index.umd.min.js:1 OPTIONS http://localhost:1204/api/Login/ShopKeeperLogin 405 (Method Not Allowed)web
在項目Global.asax中添加對OPTIONS方法的處理:後端
/// <summary> /// 跨域設置(預請求響應問題) /// </summary> protected void Application_BeginRequest() { //OPTIONS請求方法的主要做用(預請求,判斷是否可以請求成功): //用來檢查服務器的性能。如:AJAX進行跨域請求時的預檢,須要向另一個域名的資源發送一個HTTP OPTIONS請求頭,用以判斷實際發送的請求是否安全。 if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") { //表示對輸出的內容進行緩衝,執行page.Response.Flush()時,會等全部內容緩衝完畢,將內容發送到客戶端。 //這樣就不會出錯,形成頁面卡死狀態,讓用戶無限制的等下去 Response.Flush(); } }
Access to XMLHttpRequest at 'http://localhost:1204/api/Login/ShopKeeperLogin' from origin 'http://localhost:8081' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.api
在Web.config中找到system.webServer標籤裏面添加以下配置:跨域
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="*" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" /> </customHeaders> </httpProtocol>