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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

ASP.NET Web API自身对CORS的支持:从实例开始

發(fā)布時(shí)間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Web API自身对CORS的支持:从实例开始 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在《通過擴(kuò)展讓ASP.NET Web API支持W3C的CORS規(guī)范》中我們通過自定義的HttpMessageHandler為ASP.NET Web API賦予了跨域資源共享的能力,具體來講,這個(gè)自定義的CorsMessageHandler的自由主要體現(xiàn)在如下兩個(gè)方面:其一,為簡(jiǎn)單跨域請(qǐng)求的響應(yīng)和繼預(yù)檢請(qǐng)求后的真實(shí)跨域資源請(qǐng)求的響應(yīng)添加CORS報(bào)頭;其二,對(duì)從瀏覽器發(fā)送的預(yù)檢請(qǐng)求予以響應(yīng)。實(shí)際上ASP.NET Web API本身就提供了針對(duì)CORS的支持,就其實(shí)現(xiàn)原理來看,與我們的實(shí)現(xiàn)沒有本質(zhì)的區(qū)別。接下來我們通過實(shí)例演示如何利用ASP.NET Web API自身的支持來實(shí)現(xiàn)“跨域資源共享”。

如圖右圖所示,我們利用Visual Studio在同一個(gè)解決方案中創(chuàng)建了兩個(gè)Web應(yīng)用。從項(xiàng)目名稱可以看出,WebApi和MvcApp分別為ASP.NET Web API和MVC應(yīng)用,后者是Web API的調(diào)用者。我們直接采用默認(rèn)的IIS Express作為兩個(gè)應(yīng)用的宿主,并且固定了端口號(hào):WebApi和MvcApp的端口號(hào)分別為“3721”和“9527”,所以指向兩個(gè)應(yīng)用的URI肯定不可能是同源的。

ASP.NET Web API對(duì)CORS提供的原生支持實(shí)現(xiàn)在一個(gè)名為“Microsoft ASP.NET Web API 2 Cross-Origin Support”的NuGet包中。我們依然沿用上面這個(gè)通過跨域Ajax請(qǐng)求獲取聯(lián)系人列表的這個(gè)例子,我們右鍵選種WebApi項(xiàng)目并在上下文菜單中選擇“管理NuGet包(Manage NuGet Package)”,在彈出的如左圖所示的對(duì)話框中,我們輸入“CORS”作為查詢條件后會(huì)看到這個(gè)NuGet包頭。

當(dāng)我們安裝這個(gè)包之后,現(xiàn)有的packages目錄下會(huì)添加兩個(gè)名稱分別為“Microsoft.AspNet.Cors.5.0.0”和“Microsoft.AspNet.WebApi.Cors.5.0.0”,針對(duì)保存其中的兩個(gè)程序集(System.Web.Cors.dll和System.Web.Http.Cors.dll)的引用被自動(dòng)添加到WebApi項(xiàng)目中。

ASP.NET針對(duì)CORS的實(shí)現(xiàn)就實(shí)現(xiàn)在程序集System.Web.Cors.dll中,另一個(gè)程序集System.Web.Http.Cors.dll自然就是針對(duì)ASP.NET Web API的。在默認(rèn)情況下,針對(duì)CORS的支持是關(guān)閉的,我們需要在Global.asax中按照如下的方式調(diào)用當(dāng)前HttpConfiguration的擴(kuò)展方法EnableCors顯示開啟針對(duì)CORS的支持。

   1: public class WebApiApplication : System.Web.HttpApplication
   2: {
   3:     protected void Application_Start()
   4:     {
   5:         GlobalConfiguration.Configuration.EnableCors();
   6:         //其他操作
   7:     }
   8: }

和在《通過擴(kuò)展讓ASP.NET Web API支持W3C的CORS規(guī)范》實(shí)現(xiàn)CORS的實(shí)例一樣,ASP.NET Web API自身也是借助于應(yīng)用在HttpController類型或者定義其中的Action方法的特性來定義CORS授權(quán)策略的,這個(gè)特性類型為System.Web.Http.Cors.EnableCorsAttribute,它定義在程序集System.Web.Http.Cors.dll中。我們只需要按照如下的方式將EnableCorsAttribute特性應(yīng)用到定義在ContactsController中的Action方法GetAllContacts上即可。

   1: 
   2: public class ContactsController : ApiController
   3: {
   4:     public IHttpActionResult GetAllContacts()
   5:     {
   6:         Contact[] contacts = new Contact[]
   7:         {
   8:             new Contact{ Name="張三", PhoneNo="123", EmailAddress="zhangsan@gmail.com"},
   9:             new Contact{ Name="李四", PhoneNo="456", EmailAddress="lisi@gmail.com"},
  10:             new Contact{ Name="王五", PhoneNo="789",EmailAddress="wangwu@gmail.com"},
  11:         };
  12:         return Json<IEnumerable<Contact>>(contacts);
  13:     }
  14: }
  15:? 
  16: public class Contact
  17: {
  18:     public string Name { get; set; }
  19:     public string PhoneNo { get; set; }
  20:     public string EmailAddress { get; set; }
  21: }

如上面的代碼片斷所示,我們?yōu)閼?yīng)用的EnableCorsAttribute特性指定了三個(gè)參數(shù)。根據(jù)參數(shù)名稱和上面我們針對(duì)W3C的CORS規(guī)范的介紹,我們應(yīng)該可以猜得到它們分別代表:授權(quán)的源站點(diǎn),和請(qǐng)求所允許的自定義包頭和HTTP方法。我們將客戶端ASP.NET MVC應(yīng)用所在的站點(diǎn)“http://localhost:9527”設(shè)置為授權(quán)的源站點(diǎn),后兩者則直接設(shè)置為“*”表示對(duì)此不作任何限制。

接下來們?cè)贛vcApp應(yīng)用中定義如下一個(gè)HomeController,默認(rèn)的Action方法Index會(huì)將對(duì)應(yīng)的View呈現(xiàn)出來。

   1: public class HomeController : Controller
   2: {
   3:     public ActionResult Index()
   4:     {
   5:         return View();
   6:     }
   7: }

如下所示的是Action方法Index對(duì)應(yīng)View的定義。我們的目的在于:當(dāng)頁(yè)面成功加載之后以Ajax請(qǐng)求的形式調(diào)用上面定義的Web API獲取聯(lián)系人列表,并將自呈現(xiàn)在頁(yè)面上。如下面的代碼片斷所示,Ajax調(diào)用和返回?cái)?shù)據(jù)的呈現(xiàn)是通過調(diào)用jQuery的getJSON方法完成的。

   1: <html>
   2: <head>
   3:     <title>聯(lián)系人列表</title>
   4:     <script type="text/javascript" src="@Url.Content("~/scripts/jquery-1.10.2.js")"></script>
   1:? 
 
   2: </head>
 
   3: <body>
 
   4:     <ul id="contacts"></ul>
 
   5:     <script type="text/javascript">
 
   6:         $(function ()
 
   7:         {
 
   8:             var url = "http://localhost:3721/api/contacts";
 
   9:             $.getJSON(url, null, function (contacts) {
 
  10:                 $.each(contacts, function (index, contact)
 
  11:                 {
 
  12:                     var html = "<li><ul>";
 
  13:                     html += "<li>Name: " + contact.Name + "</li>";
 
  14:                     html += "<li>Phone No:" + contact.PhoneNo + "</li>";
 
  15:                     html += "<li>Email Address: " + contact.EmailAddress + "</li>";
 
  16:                     html += "</ul>";
 
  17:                     $("#contacts").append($(html));
 
  18:                 });
 
  19:             });
 
  20:         });
 
  21:     
          </script>
   5: </body>
   6: </html>

現(xiàn)在運(yùn)行我們的ASP.NET MVC程序,依然可以得到如右圖所示的輸出結(jié)果。從編程的角度來講,ASP.NET Web API針對(duì)CORS的實(shí)現(xiàn)僅僅涉及到兩個(gè)方面:

  • 其一,HttpConfiguration的擴(kuò)展方法EnableCors,它用于開啟ASP.NET Web API針對(duì)CORS的支持;
  • 其二,EnableCorsAttribute特性,它為目標(biāo)HttpController或者Action方法定義CORS授權(quán)策略。

但是整個(gè)CORS體系不限于此,在它們背后隱藏著一系列的類型,我們將會(huì)利用后續(xù)的文章對(duì)此作全面講述。

CORS系列文章
[1] 同源策略與JSONP
[2] 利用擴(kuò)展讓ASP.NET Web API支持JSONP
[3] W3C的CORS規(guī)范
[4] 利用擴(kuò)展讓ASP.NET Web API支持CORS
[5] ASP.NET Web API自身對(duì)CORS的支持: 從實(shí)例開始
[6] ASP.NET Web API自身對(duì)CORS的支持: CORS授權(quán)策略的定義和提供
[7] ASP.NET Web API自身對(duì)CORS的支持: CORS授權(quán)檢驗(yàn)的實(shí)施
[8] ASP.NET Web API自身對(duì)CORS的支持: CorsMessageHandler

轉(zhuǎn)載于:https://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-05.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET Web API自身对CORS的支持:从实例开始的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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