精通ASP.NET MVC——控制器和动作
在MVC框架中,控制器必須實現System.Web.Mvc命名空間的IController接口,如下圖所示:
//// 摘要:// 定義控制器所需的方法。public interface IController{//// 摘要:// 執行指定的請求上下文。//// 參數:// requestContext:// 請求上下文。void Execute(RequestContext requestContext);}這是一個很簡單的接口。唯一的方法Excute,在請求以控制器為目標時被調用。但是發揮著重要的作用。?在Controller文件夾中創建一個新的名為“BasicController”的類文件,如下圖所示:
public class BasicController : IController{public void Execute(RequestContext requestContext){string controller = requestContext.RouteData.Values["controller"].ToString();string action = requestContext.RouteData.Values["action"].ToString();requestContext.HttpContext.Response.Write(string.Format("Controller:{0},Action:{1}", controller, action));}}IController接口的Execute方法被傳遞給System.Web.Routing.RequestContext對象,它提供關于請求和匹配路由的信息,如下圖所示:?
| 名稱 | 描述 |
| HttpContext | 返回一個描述當前請求的 HttpContextBase 對象 |
| RouteData | 返回一個描述匹配請求的路由的RouteData對象 |
HttpContextBase對象對一組描述當前請求的對象提供訪問。RouteData對象描述了路由,下圖描述了RouteData屬性:
| 名稱 | 描述 |
| Route | 返回匹配路由的RouteBase實現 |
| RouteHandler | 返回處理路由的IRouteHandler |
| Values | 返回按名稱索引的片段值的集合 |
運行效果如下圖所示:?
? ? ? ? ? ?
接受請求數據:?
控制器經常需要訪問來自于輸入的請求的數據,如查詢字符串值,表單值,以及由路由系統根據輸入URL解析所得到得到參數。訪問這些數據有三個主要途徑:
1、通過一組上下文對象進行提取。
2、作為參數被傳遞給動作方法而形成的的數據。
3、明確地調用框架的模型綁定特性。
?
當控制器通過Controller基類派生而來的時候,使得到了一組便利屬性,可以用來訪問與請求相關的信息。這些便利屬性包括Request,Reponse,RouteData、HttpContext,以及Server。每一個屬性都包括了請求不同方面的信息,是因為每一個都是從請求的ControllerContext實例接受了不同類型的數據。這些屬性統稱為“便利屬性”如下圖所示:
?
| 屬性 | 類型 | 描述 |
| Request.QueryString | NameValueCollection | 隨該請求發送的GET變量 |
| Request.Form | NameValueCollention | 隨該請求發送的POST變量 |
| Request.Cookies | HttpCookieCollection | 由瀏覽器隨該請求發送的Cookies |
| Request.HttpMethod | sting | 用于該請求的HTTP方法(動詞,如GET或者POST) |
| Request.Headers | NameValueCollection | 隨該請求發送的整個HTTP報頭 |
| Request.Url | Url | 所請求的URL |
| Request.UserHostAddress | string | 形成該請求的用戶IP地址 |
| Request.Route | RouteBase | 為該請求所選擇的RouteTable.Routes條目 |
| RouteData.Values | RouteValueDictionary | 當前路由的參數(從URL或默認值提取) |
| HttpContext.Application | HttpApplicationStateBase | 應用程序狀態庫 |
| HttpContext.Cache | Cache | 應用程序緩存庫 |
| HttpContext.Items | IDictionary | 當前請求的狀態庫 |
| HttpContext.Session | HttpSessionStateBase | 訪問者會話狀態庫 |
| User | IPrincipal | 已登錄用戶的認證信息 |
| TempData | TempDataDictionary | 為當前用戶存儲的臨時數據項 |
?
動作結果?
MVC框架通過使用動作結果(Action Result)把指明意圖 和 執行意圖分離開來。一般都是返回一個派生與ActionResult類的對象,它描述控制器相應應該要完成的功能。例如,渲染一個視圖,重定向到另一個URL或 動作方法等,在動作方法被執行后,創建MVC框架處理的ActionResult對象以產生結果。MVC框架有許多內建的動作結果類型,如下圖所示:
| 類型 | 描述 | 輔助器方法 |
| ViewResult | 返回指定的或默認的視圖模板 | View |
| PartialViewResult | 返回指定的或默認的分部視圖模板 | PartialView |
| RedireToRouteResult | 將HTTP 301或者302重定向發給一個動作方法或特定的路由條目,根據路由配置生成一個URL | RedirectToAction RedirectToActionPermanent RedirectToRoute RedirectToRoutePermanent |
| RedirectResult | 將HTTP301或302重定向發送給一個特定的URL | Redirect RedirectPermanent |
| ContentResult | 返回原始的文本數據給瀏覽器,隨意設置文本類型頭部 | Content |
| FileResult | 將二進制(例如,磁盤文件或內存字節數組)直接傳送給瀏覽器 | File |
| JsonResult | 將一個.NET對象序列化成JSON格式,發送給響應 | Json |
| JavaScriptResult | 發送一個由瀏覽器執行的JavaScript源代碼偏度 | JavaScript |
| HttpUnauthorizedResult | 將響應的HTTP狀態碼設置為401(意味“未授權”),這會引發當前的認證機制(表單認證或Windows認證)要求訪問者進行登錄 | None |
| HttpNotFoundResult | 返回一個HTTP的“404——未找到”錯誤 | HttpNotFount |
| HttpStatusCodeResult | 返回一個指定的HTTP碼 | None |
| EmptyResult | 什么也不做 | None |
?
?
?
總結
以上是生活随笔為你收集整理的精通ASP.NET MVC——控制器和动作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git pull和push整理和归纳
- 下一篇: asp.net ajax控件工具集 Au