How to output ASP.NET MVC from IHttp to Page
This article will explain in detail how to output ASP.NET MVC from IHttp to the page. The editor thinks it is very practical, so I share it for you as a reference. I hope you can get something after reading this article.
The code is as follows:
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)
}
}
The code is as follows:
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 ()
}
}
The code is as follows:
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 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)
}
The code is as follows:
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 interface
}
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)
}
}
On "ASP.NET MVC how to IHttp to page output" this article is shared here, I hope the above content can be of some help to you, so that you can learn more knowledge, if you think the article is good, please share it out for more people to see.