ASP.NET MVC中的各種內容物件

來源:互聯網
上載者:User

先來個圖預覽一下:

1.首先是System.Web.Routing下的RequestContext類,代碼相當簡單,把HttpContextBase和RouteData放在一起就OK了。

Code
using System;
using System.Security.Permissions;
using System.Web;

namespace System.Web.Routing
{
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal),
     AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
    public class RequestContext
    {
        // Methods
        public RequestContext(HttpContextBase httpContext, RouteData routeData)
        {
            if (httpContext == null)
                throw new ArgumentNullException("httpContext");
            if (routeData == null)
                throw new ArgumentNullException("routeData");
            this.HttpContext = httpContext;
            this.RouteData = routeData;
        }

        // Properties
        public HttpContextBase HttpContext { get; internal set; }

        public RouteData RouteData { get; internal set; }
    }
}

關於RouteData,我以後會講的,現在只需要知道它儲存了Route資訊,從URL中根據Route規則Map到的參數值都在裡面。

2.接著就是ControllerContext類了,這個類很有意思:

using System.Security.Permissions;

namespace System.Web.Mvc
{
    using System.Web.Routing;

    [AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
    public class ControllerContext : RequestContext
    {
        protected internal ControllerContext(ControllerContext controllerContext)
            : this(GetControllerContext(controllerContext), GetControllerContext(controllerContext).Controller) {}

        public ControllerContext(HttpContextBase httpContext, RouteData routeData, ControllerBase controller)
            : base(httpContext, routeData)
        {
            if (controller == null) throw new ArgumentNullException("controller");
            Controller = controller;
        }

        public ControllerContext(RequestContext requestContext, ControllerBase controller)
            : this(
                GetRequestContext(requestContext).HttpContext, GetRequestContext(requestContext).RouteData, controller) {}

        public ControllerBase Controller { get; private set; }

        internal static RequestContext GetRequestContext(RequestContext requestContext)
        {
            if (requestContext == null) throw new ArgumentNullException("requestContext");
            return requestContext;
        }

        internal static ControllerContext GetControllerContext(ControllerContext controllerContext)
        {
            if (controllerContext == null) throw new ArgumentNullException("controllerContext");
            return controllerContext;
        }
    }
}

其實它也就是在RequestContext的基礎上加了個對Controller的引用(當然是對ControllerBase基類的引用)。

它的幾個重載的建構函式以及靜態方法寫得很有意思,值得借鑒。

3.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.