Csharp/C#教程:如何从ASP.NET MVC中的HttpModule执行控制器操作?分享


如何从ASP.NET MVC中的HttpModule执行控制器操作?

我有以下IHttpModule ,我试图找出如何从控制器为给定的绝对或相对URL执行操作。

 public class CustomErrorHandlingModule : IHttpModule { #region Implementation of IHttpModule public void Init(HttpApplication context) { context.Error += (sender, e) => OnError(new HttpContextWrapper(((HttpApplication)sender).Context)); } public void Dispose() {} public void OnError(HttpContextBase context) { // Determine error resource to display, based on HttpStatus code, etc. // For brevity, i'll hardcode it for this SO question. const string errorPage = @"/Error/NotFound"; // Now somehow execute the correct controller for that route. // Return the html response. } } 

如何才能做到这一点?

沿线的事情应该做的工作:

 public void OnError(HttpContextBase context) { context.ClearError(); context.Response.StatusCode = 404; var rd = new RouteData(); rd.Values["controller"] = "error"; rd.Values["action"] = "notfound"; IController controller = new ErrorController(); var rc = new RequestContext(context, rd); controller.Execute(rc); } 

您可能还会发现以下相关答案很有用。

我认为你需要使用HttpContext.Current.RewritePath

这使您可以更改要使用的文件的路径。 这是在MVC 2项目中创建的default.aspx

我使用它的方式和你一样,在没有302的情况下进行error handling但是现在无法访问我的代码。 我会在周一发布一些代码。

你可以使用HttpContext:

 System.Web.HttpContext.Current.Response.Redirect("/Error/NotFound"); 

嗨使用它让框架使用路由和所有组件执行该路径的代码:

  // MVC 3 running on IIS 7+ if (HttpRuntime.UsingIntegratedPipeline) { context.Server.TransferRequest(url, true); } else { // Pre MVC 3 context.RewritePath(url, false); IHttpHandler httpHandler = new MvcHttpHandler(); httpHandler.ProcessRequest(httpContext); } 

理想情况下,请求处理在此时是完整的。 如果不是这种情况,并且如果沿着asp.net http管道进一步处理请求,那么在此时使用它来停止请求,并告诉asp.net我们已经完成了这个请求:

 HttpApplication app = (HttpApplication) context.Application; app.CompleteRequest();; 

我不确定上下文是否有应用程序(我现在不在VS附近),但如果需要,可以使用它来停止此模块中的请求。

上述就是C#学习教程:如何从ASP.NET MVC中的HttpModule执行控制器操作?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1035110.html

(0)
上一篇 2022年1月19日
下一篇 2022年1月19日

精彩推荐