日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebApi中跨域解决办法

發(fā)布時(shí)間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebApi中跨域解决办法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

在做Web開發(fā)中,常常會(huì)遇到跨域的問題,到目前為止,已經(jīng)有非常多的跨域解決方案。由于時(shí)間有限,本文不會(huì)深入。

筆者遇到的問題是Js調(diào)用WebAPI中的數(shù)據(jù)進(jìn)行跨域的場(chǎng)景。涉及若干跨域方案:

方案1:jsonp+回調(diào)

方案2:Microsoft.AspNet.WebApi.Cors提供的跨域?qū)傩?

方案3:利用ACAO編寫自定義Filter實(shí)現(xiàn)

一、關(guān)于方案一

方案1是同事提出來的,已經(jīng)經(jīng)過論證,并且自己研究過,是可行的。本質(zhì)上是通過script標(biāo)簽動(dòng)態(tài)加載js,還有callback機(jī)制。

但是,我個(gè)人覺得這個(gè)方案有些不足:

  • 實(shí)現(xiàn)細(xì)節(jié)復(fù)雜,技術(shù)復(fù)雜性增大了不少,并且不好理解(服務(wù)器端、Web前端兩頭忙活)

  • 只支持單向跨域

  • 只支持Get,不支持Post等Http請(qǐng)求

  • 擴(kuò)展性不強(qiáng)

  • 我在讀參考文章時(shí),感覺思路不清晰(至于是作者思路不清晰,還是寫作思路不清晰,還是我個(gè)人理解能力不到位這個(gè)不好說。)

  • 二、關(guān)于方案二

    首先,我提出了方案2。當(dāng)時(shí)在我看來,這個(gè)是比較合適的一個(gè)方案,接近完美。但是,它不可行。

    原因在于:Microsoft.AspNet.WebApi.Cors的framework版本是4.5,而我們現(xiàn)有項(xiàng)目是4.0。我們的時(shí)間有限,幾乎沒有時(shí)間做深入研究。

    三、關(guān)于方案三

    我受方案2的啟發(fā),個(gè)人實(shí)現(xiàn)了方案3。方案3實(shí)現(xiàn)的最終效果接近方案2。支持:Global級(jí)別、Controller級(jí)別、Action級(jí)別。

    代碼如下:

    using System.Web.Http.Filters; namespace MvcApplication1.CustomFilter {public class CrossSiteAttribute : ActionFilterAttribute{private const string Origin = "Origin";private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";private const string originHeaderdefault = "*";public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext){actionExecutedContext.Response.Headers.Add(AccessControlAllowOrigin, originHeaderdefault);}} }

    服務(wù)器端代碼示例:

    [CrossSite]public IEnumerable<string> Get(){return new string[] { "value1", "value2" };}

    服務(wù)器端只需要把過濾器的標(biāo)簽[CrossSite]寫上,服務(wù)器端就支持跨域了。省去了Web前端的處理和服務(wù)器端回調(diào)的處理。

    當(dāng)然,它很容易進(jìn)行擴(kuò)展。

    轉(zhuǎn)載于:https://my.oschina.net/wlb/blog/272639

    總結(jié)

    以上是生活随笔為你收集整理的WebApi中跨域解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。