ASP.NET WebAPI2復(fù)雜請求跨域設(shè)置的方法介紹
ASP.Net Core的跨域設(shè)置比較簡單 官方都整合了 具體的參見微軟官方文檔:
https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1#ecors
跨域條件
跨域是指的當(dāng)前資源訪問其他資源時發(fā)起的http請求由于安全原因(由于同源策略,域名、協(xié)議、端口中只要有一個不同就不同源),瀏覽器限制了這些請求的正常訪問,特別需要注意的是這些發(fā)生在瀏覽器中。
解決方法
方法1.web.config文件中的 system.webServer 節(jié)點下 增加如下配置:
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer>
方法2.Nuget包引用Microsoft.AspNet.Cors,然后在控制器上添加特性
[EnableCors(origins: "*", headers: "*", methods: "*")]
注意以上兩種方法,不要重復(fù)設(shè)置,設(shè)置了兩次會報錯 'Access-Control-Allow-Origin' header contains multiple values '*, *',。
復(fù)雜請求問題
以上兩個方法,僅對簡單跨域請求有效,無法處理復(fù)雜的跨域請求。
簡單請求:請求方法是GET/HEAD/POST,并且contentType為text/plain、application/x-www-form-urlencoded、multipart/form-data。
不滿足上述條件的視為復(fù)雜請求,開發(fā)中我們常觸發(fā)這個條件大多因為我們的請求的contentType設(shè)置的是application/json導(dǎo)致的。
注意:簡單請求如果設(shè)置了Authentication認(rèn)證header也會讓請求“升級”為復(fù)雜請求。
復(fù)雜請求會在正式通信之前,增加一次HTTP查詢請求,稱為"預(yù)檢"請求(preflight)。瀏覽器先詢問服務(wù)器,當(dāng)前網(wǎng)頁所在的域名是否在服務(wù)器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復(fù),瀏覽器才會發(fā)出正式的XMLHttpRequest請求,否則就報錯,而這次preflight的Http方法就是Options。換句話說,如果你的xhr請求發(fā)出前,會先發(fā)出一個Options請求,就說明你要執(zhí)行的請求是復(fù)雜請求。
復(fù)雜請求處理
在Global.asax文件中,通過Application_BeginRequest方法進(jìn)行處理:
protected override void Application_BeginRequest(object sender, EventArgs e) { //直接設(shè)置所有的可跨域訪問 Response.Headers.Add("Access-Control-Allow-Origin",”*“); if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")//攔截處理Options請求 { Response.Headers.Add("Access-Control-Allow-Headers", "*"); Response.Headers.Add("Access-Control-Allow-Methods", "*"); Response.Flush(); Response.End(); } base.Application_BeginRequest(sender, e); }
這樣,對Options跨域請求進(jìn)行了“可支持跨域”的應(yīng)答,之后的正式請求到達(dá)控制器中的Action,又有相應(yīng)的跨域訪問處理。那么對于整個的復(fù)雜請求跨域就完成實現(xiàn)了。
微軟官方參考:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
總結(jié)
到此這篇關(guān)于ASP.NET WebAPI2復(fù)雜請求跨域設(shè)置的文章就介紹到這了,更多相關(guān)ASP.NET WebAPI2復(fù)雜請求跨域設(shè)置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Asp.Net Core2.1前后使用HttpClient的兩種方式
這篇文章主要給大家介紹了關(guān)于Asp.Net Core2.1前后HttpClient的使用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03ASP.NET中防止頁面刷新造成表單重復(fù)提交執(zhí)行兩次操作
本文主要介紹在Session存儲唯一標(biāo)識Token,通過和后臺對比,以實現(xiàn)防止刷新提交表單的問題。2016-04-04asp.net 從客戶端中檢測到有潛在危險的 Request.Form 值錯誤解
asp.net程序運行時出現(xiàn)以下錯誤: “/news”應(yīng)用程序中的服務(wù)器錯誤。2009-05-05一步步打造簡單的MVC電商網(wǎng)站BooksStore(3)
這篇文章主要和大家一起一步步打造一個簡單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第三篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04安裝.NET Framework進(jìn)度條卡住不動的解決方案(推薦)
VS在安裝之前需要安裝.NET Framework,我安裝的是4.0版本。但是安裝進(jìn)度條到一半左右時就卡住不動了。前前后后重試多次,還有幾次重新開機(jī),但都沒用,怎么解決呢,下面給大家分享下解決方案2016-12-12asp.net fileupload控件上傳圖片并預(yù)覽圖片
這篇文章主要介紹了asp.net fileupload控件上傳圖片后并進(jìn)行預(yù)覽圖片的功能,需要的朋友可以參考下2015-11-11ASP.NET?Core?MVC緩存Tag?Helpers到內(nèi)存
這篇文章介紹了ASP.NET?Core?MVC緩存Tag?Helpers到內(nèi)存的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02c#設(shè)置xml內(nèi)容不換行及屬性xsi:nil=true的空節(jié)點添加
c#設(shè)置xml內(nèi)容不換行:添加屬性為xsi:nil=true的空節(jié)點便可實現(xiàn),感興趣的你可以參考下本文,或許有意想不到的收獲2013-03-03