手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >ASP.NET MVC 从IHttp到页面输出的实例代码
ASP.NET MVC 从IHttp到页面输出的实例代码
摘要:复制代码代码如下:MVCHandler:IHttpHandlervoidIHttpHandler.ProcessRequest(HttpCo...

复制代码 代码如下:

MVCHandler : IHttpHandler

void IHttpHandler.ProcessRequest(HttpContext httpContext)

{

this.ProcessRequest(httpContext);

}

protected virtual void ProcessRequest(HttpContext httpContext)

{

HttpContextBase base2 = new HttpContextWrapper(httpContext);

this.ProcessRequest(base2);

}

protected internal virtual void ProcessRequest(HttpContextBase httpContext)

{

IController controller;

IControllerFactory factory;

this.ProcessRequestInit(httpContext, out controller, out factory);

try

{

controller.Execute(this.RequestContext);

}

finally

{

factory.ReleaseController(controller);

}

}

复制代码 代码如下:

Controller : ControllerBase : IController

void IController.Execute(RequestContext requestContext) //------>Controller

{

this.Execute(requestContext);

}

protected virtual void Execute(RequestContext requestContext) //------>ControllerBase

{

if (requestContext == null)

{

throw new ArgumentNullException("requestContext");

}

if (requestContext.HttpContext == null)

{

throw new ArgumentException(MvcResources.ControllerBase_CannotExecuteWithNullHttpContext, "requestContext");

}

this.VerifyExecuteCalledOnce();

this.Initialize(requestContext);

using (ScopeStorage.CreateTransientScope())

{

this.ExecuteCore();

}

}

protected override void ExecuteCore() //------>Controller

{

this.PossiblyLoadTempData();

try

{

string requiredString = this.RouteData.GetRequiredString("action");

if (!this.ActionInvoker.InvokeAction(base.ControllerContext, requiredString)) //public IActionInvoker ActionInvoker { get; set; }

{

this.HandleUnknownAction(requiredString);

}

}

finally

{

this.PossiblySaveTempData();

}

}

复制代码 代码如下:

ControllerActionInvoker : IActionInvoker

public virtual bool InvokeAction(ControllerContext controllerContext, string actionName)

{

if (controllerContext == null)

{

throw new ArgumentNullException("controllerContext");

}

if (string.IsNullOrEmpty(actionName))

{

throw new ArgumentException(MvcResources.Common_NullOrEmpty, "actionName");

}

ControllerDescriptor controllerDescriptor = this.GetControllerDescriptor(controllerContext);

ActionDescriptor actionDescriptor = this.FindAction(controllerContext, controllerDescriptor, actionName);

if (actionDescriptor == null)

{

return false;

}

FilterInfo filters = this.GetFilters(controllerContext, actionDescriptor);

try

{

AuthorizationContext context = this.InvokeAuthorizationFilters(controllerContext, filters.AuthorizationFilters, actionDescriptor);

if (context.Result != null)

{

this.InvokeActionResult(controllerContext, context.Result);

}

else

{

if (controllerContext.Controller.ValidateRequest)

{

ValidateRequest(controllerContext);

}

IDictionary<string, object> parameterValues = this.GetParameterValues(controllerContext, actionDescriptor);

ActionExecutedContext context2 = this.InvokeActionMethodWithFilters(controllerContext, filters.ActionFilters, actionDescriptor, parameterValues);

this.InvokeActionResultWithFilters(controllerContext, filters.ResultFilters, context2.Result);

}

}

catch (ThreadAbortException)

{

throw;

}

catch (Exception exception)

{

ExceptionContext context3 = this.InvokeExceptionFilters(controllerContext, filters.ExceptionFilters, exception);

if (!context3.ExceptionHandled)

{

throw;

}

this.InvokeActionResult(controllerContext, context3.Result);

}

return true;

}

protected virtual void InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)

{

actionResult.ExecuteResult(controllerContext);

}

复制代码 代码如下:

ActionResult

public override void ExecuteResult(ControllerContext context)

{

if (context == null)

{

throw new ArgumentNullException("context");

}

if (string.IsNullOrEmpty(this.ViewName))

{

this.ViewName = context.RouteData.GetRequiredString("action");

}

ViewEngineResult result = null;

if (this.View == null)

{

result = this.FindView(context); //ViewEngineResult

this.View = result.View; //IView接口

}

TextWriter output = context.HttpContext.Response.Output;

ViewContext viewContext = new ViewContext(context, this.View, this.ViewData, this.TempData, output);

this.View.Render(viewContext, output);

if (result != null)

{

result.ViewEngine.ReleaseView(context, this.View);

}

}

【ASP.NET MVC 从IHttp到页面输出的实例代码】相关文章:

ASP.NET常用代码

ASP.NET MVC 学习5、登陆页面改为SSO验证

ASP.NET XmlHttp跨域访问实现代码

ASP.net 验证码实现代码(C#)

.Net 文本框实现内容提示的实例代码

ASP.NET页面间的传值的几种方法

ASP.NET 导出到Excel时保留换行的代码

在ASP.Net中实现flv视频转换的代码

.NET 扩展实现代码

asp.net DiscuzNT登录,退出的代码

精品推荐
分类导航