<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      了解ASP.NET MVC幾種ActionResult的本質(zhì):HttpStatusCodeResult & RedirectResult/RedirectToRouteResult

      在本系列的最后一篇,我們來(lái)討論最后三個(gè)ActionResult:HttpStatusCodeResult、RedirectResult和RedirectToRouteResult 。第一個(gè)用于實(shí)現(xiàn)針對(duì)某個(gè)HTTP狀態(tài)的響應(yīng),而后兩個(gè)用于實(shí)現(xiàn)重定向。至于重定向,又分為“暫時(shí)重定向”和“永久重定向”,按照響應(yīng)狀態(tài),又稱(chēng)“302重定向”和“301重定向”。[本文已經(jīng)同步到《How ASP.NET MVC Works?》中]

      目錄
      一、HttpStatusCodeResult
      二、RedirectResult
      三、RedirectToRouteResult
      四、“302重定向”V.S.“301重定向”

      一、HttpStatusCodeResult

      每一個(gè)HTTP響應(yīng)均具有一個(gè)表示響應(yīng)狀態(tài)的代碼和一個(gè)可選的狀態(tài)描述,正常情況下返回“200 OK”。System.Web.Mvc.HttpStatusCodeResult使我們很容易地返回一個(gè)指定狀態(tài)的HTTP響應(yīng)。如下面的代碼片斷所示,HttpStatusCodeResult具有StatusCode和StatusDescription兩個(gè)只讀的屬性分別表示響應(yīng)狀態(tài)碼和狀態(tài)描述信息。在構(gòu)造函數(shù)中既可以將狀態(tài)碼設(shè)置成一個(gè)整數(shù),也可以以HttpStatusCode枚舉形式來(lái)指定狀態(tài)碼。

         1: public class HttpStatusCodeResult : ActionResult
         2: {    
         3:     public HttpStatusCodeResult(int statusCode);
         4:     public HttpStatusCodeResult(HttpStatusCode statusCode);
         5:     public HttpStatusCodeResult(int statusCode, string statusDescription);
         6:     public HttpStatusCodeResult(HttpStatusCode statusCode, string statusDescription);
         7:  
         8:     public override void ExecuteResult(ControllerContext context);
         9:     
        10:     public int         StatusCode { get; }
        11:     public string      StatusDescription { get;}
        12: }

      HttpStatusCodeResult實(shí)現(xiàn)在ExecuteResult方法中的請(qǐng)求響應(yīng)邏輯很簡(jiǎn)單,如下面的代碼片斷所示,它僅僅是設(shè)置了當(dāng)前HttpResponse的StatusCode和StatusDescription而已。有一點(diǎn)值得一提的是,如果我們采用Visual Studio的Development Server作為Web應(yīng)用的宿主,通過(guò)HttpStatusCodeResult的StatusDescription屬性設(shè)置的狀態(tài)描述信息不會(huì)反映HTTP響應(yīng)中,只有采用IIS作為宿主才會(huì)真正將此信息寫(xiě)入響應(yīng)消息。

         1: public class HttpStatusCodeResult : ActionResult
         2: {
         3:     //其他成員
         4:     public override void ExecuteResult(ControllerContext context)
         5:     {      
         6:         context.HttpContext.Response.StatusCode = this.StatusCode;
         7:         if (this.StatusDescription != null)
         8:         {
         9:             context.HttpContext.Response.StatusDescription = this.StatusDescription;
        10:         }
        11:     }
        12: }

      HttpStatusCodeResult具有兩個(gè)子類(lèi),一個(gè)基于響應(yīng)狀態(tài)“404, Not Found”的System.Web.Mvc.HttpNotFoundResult,另一個(gè)是基于響應(yīng)狀態(tài)“401, Not Authorized”的System.Web.Mvc.HttpUnauthorizedResult,第7章“Action的執(zhí)行”中篩選器AuthorizeAttribute在授權(quán)檢驗(yàn)失敗的情況下返回的就是一個(gè)HttpUnauthorizedResult對(duì)象。

      二、RedirectResult

      RedirectResult幫助我們實(shí)現(xiàn)針對(duì)某個(gè)地址的重定向,其作用與調(diào)用HttpResonse的Redirect/RedirectPermanent方法完全一致。如下面的代碼片斷所示,RedirectResult具有兩個(gè)只讀屬性Permanent和Url,前者表示采用永久重定向還是暫時(shí)重定向,默認(rèn)值為False,后者表示重定向的目標(biāo)地址,既可以采用絕對(duì)地址(比如http://www.asp.net),也可以采用相對(duì)地址(比如~/account/register)。

         1: public class RedirectResult : ActionResult
         2: {    
         3:     public RedirectResult(string url);
         4:     public RedirectResult(string url, bool permanent);
         5:     public override void ExecuteResult(ControllerContext context);
         6:   
         7:     public bool       Permanent { get; }
         8:     public string     Url { get; }
         9: }

      暫時(shí)重定向和永久重定向可以分別通過(guò)調(diào)用HttpResponse的Redirect和RedirectPermanent來(lái)實(shí)現(xiàn),實(shí)際上RedirectResult基于重定向的實(shí)現(xiàn)就是通過(guò)調(diào)用這兩個(gè)方法來(lái)完成的,這可以通過(guò)如下所示的ExecuteResult方法的定義看出來(lái)。

         1: public class RedirectResult : ActionResult
         2: {
         3:     //其他成員
         4:     public override void ExecuteResult(ControllerContext context)
         5:     {
         6:         //其他操作
         7:         string url = UrlHelper.GenerateContentUrl(this.Url, context.HttpContext);
         8:         if (this.Permanent)
         9:         {
        10:             bool endResponse = false;
        11:             context.HttpContext.Response.RedirectPermanent(url, false);
        12:         }
        13:         else
        14:         {
        15:             bool flag2 = false;
        16:             context.HttpContext.Response.Redirect(url, false);
        17:         }
        18:     }
        19: }

      三、RedirectToRouteResult

      RedirectResult使我們可以直接重定向到指定的目標(biāo)地址,另一個(gè)類(lèi)似的RedirectToRouteResult幫助我們根據(jù)注冊(cè)的路由進(jìn)行重定向。如下面的代碼片斷所示,RedirectToRouteResult沒(méi)有了表示重定向目標(biāo)地址的Url屬性,取而代之的是表示路由注冊(cè)名稱(chēng)和路由參數(shù)的RouteName和RouteValues屬性,在進(jìn)行重定向時(shí)就是根據(jù)這兩個(gè)屬性根據(jù)注冊(cè)的路由解析出具體的重定向地址的。

         1: public class RedirectToRouteResult : ActionResult
         2: {   
         3:     public RedirectToRouteResult(RouteValueDictionary routeValues);
         4:     public RedirectToRouteResult(string routeName, RouteValueDictionary routeValues);
         5:     public RedirectToRouteResult(string routeName, RouteValueDictionary routeValues, bool permanent);
         6:     public override void ExecuteResult(ControllerContext context);
         7:    
         8:     public bool                     Permanent { get; }
         9:     public string                   RouteName { get; }
        10:     public RouteValueDictionary     RouteValues { get; }
        11: }

      抽象類(lèi)Controller中定義了一系列創(chuàng)建RedirectResult/RedirectToRouteResult的方法,比如Redirect/RedirectPermanent方法用于創(chuàng)建重定向到指定URL的RedirectResult,RedirectToAction/RedirectToActionPermanent用于創(chuàng)建重定向到指定的目標(biāo)Action的RedirectResult/RedirectToRouteResult,而RedirectToRoute/RedirectToRoutePermanen創(chuàng)建的RedirectResult/RedirectToRouteResult對(duì)象是針對(duì)注冊(cè)的某個(gè)路由的。

      四、“302重定向”V.S.“301重定向”

      暫時(shí)重定向和永久重定向有時(shí)又被稱(chēng)為“302重定向”和“301重定向”,302和301表示響應(yīng)的狀態(tài)碼。當(dāng)我們調(diào)用HttpResponse的Redirect/RedirectPermanent方法時(shí),除了會(huì)設(shè)置相應(yīng)的響應(yīng)狀態(tài)碼之外,還會(huì)將重定向的目標(biāo)地址寫(xiě)入響應(yīng)報(bào)頭(Location),瀏覽器在接收到響應(yīng)之后自動(dòng)發(fā)起針對(duì)重定向目標(biāo)地址的訪問(wèn)。

         1: public class HomeController : Controller
         2: {
         3:     public ActionResult Redirect()
         4:     {
         5:         return Redirect("http://www.asp.net");
         6:     }
         7:  
         8:     public ActionResult RedirectPermanent()
         9:     {
        10:         return RedirectPermanent("http://www.asp.net");
        11:     }
        12: }

      在上面的代碼片斷中,我們定義了采用暫時(shí)重定向和永久重定向的Action方法Redirect和RedirectPermanent,如果我們通過(guò)瀏覽器分別對(duì)它們發(fā)起訪訪問(wèn),會(huì)得到具有如下內(nèi)容的兩個(gè)響應(yīng)。兩種重定向的不同作用主要體現(xiàn)在SEO(Search engine optimization)上,搜索引擎會(huì)使用永久重定向目標(biāo)地址更新自己的索引,對(duì)于暫時(shí)重定向則不會(huì)。

         1: //1、Redirect
         2: HTTP/1.1 302 Found
         3: Server: ASP.NET Development Server/10.0.0.0
         4: Date: Wed, 13 Jun 2012 09:34:15 GMT
         5: X-AspNet-Version: 4.0.30319
         6: X-AspNetMvc-Version: 4.0
         7: Location: http://www.asp.net
         8: Cache-Control: private
         9: Content-Type: text/html; charset=utf-8
        10: Content-Length: 135
        11: Connection: Close
        12:  
        13: <html><head><title>Object moved</title></head><body><h2>Object moved to <a href="http://www.asp.net">here</a>.</h2></body></html>
        14:  
        15: //2、RedirectPermanent
        16: HTTP/1.1 301 Moved Permanently
        17: Server: ASP.NET Development Server/10.0.0.0
        18: Date: Wed, 13 Jun 2012 09:34:40 GMT
        19: X-AspNet-Version: 4.0.30319
        20: X-AspNetMvc-Version: 4.0
        21: Location: http://www.asp.net
        22: Cache-Control: private
        23: Content-Type: text/html; charset=utf-8
        24: Content-Length: 135
        25: Connection: Close
        26:  
        27: <html><head><title>Object moved</title></head><body><h2>Object moved to <a href="http://www.asp.net">here</a>.</h2></body></html>

       

      了解ASP.NET MVC幾種ActionResult的本質(zhì):EmptyResult & ContentResult
      了解ASP.NET MVC幾種ActionResult的本質(zhì):FileResult
      了解ASP.NET MVC幾種ActionResult的本質(zhì):JavaScriptResult & JsonResult
      了解ASP.NET MVC幾種ActionResult的本質(zhì):HttpStatusCodeResult & RedirectResult/RedirectToRouteResult

      posted @ 2012-08-16 08:33  Artech  閱讀(23480)  評(píng)論(21)    收藏  舉報(bào)
      主站蜘蛛池模板: 中文字幕亚洲无线码A| 国产精品二区中文字幕| 少妇的丰满3中文字幕| 久久婷婷五月综合色和啪| 国产精品一码在线播放| 芮城县| 亚洲少妇人妻无码视频| 91精品一区二区蜜桃| 馆陶县| 欧美成人h精品网站| 亚洲另类无码一区二区三区 | 国产乱子影视频上线免费观看| 中文字幕在线视频不卡| 亚洲精品久久一区二区三区四区| 国产区精品福利在线熟女| 一亚洲一区二区中文字幕| 任我爽精品视频在线播放| 色吊丝中文字幕在线观看| 人妻人人澡人人添人人爽人人玩| 亚洲中文字幕av不卡无码| 久久先锋男人AV资源网站| 92精品国产自产在线观看481页| 亚洲区综合区小说区激情区| 国产人妻无码一区二区三区18| 扒开粉嫩的小缝隙喷白浆视频| 国产不卡的一区二区三区| 中文字幕无码精品亚洲35| 人人澡人人透人人爽| 久久精品国产亚洲不av麻豆| 重口SM一区二区三区视频| 国内熟妇人妻色在线视频| 国产精品久久香蕉免费播放| 大陆一级毛片免费播放| 久久亚洲精品人成综合网| 婷婷99视频精品全部在线观看| 国产小受被做到哭咬床单GV| 久久热这里只有精品66| 免费无码黄十八禁网站| 99久久无色码中文字幕| 亚洲欧美综合人成在线| 377P欧洲日本亚洲大胆|