当前位置: 首页 > 编程语言 > C#

如何在ASP.NETMVC中从HttpModule执行控制器操作?Share

时间:2023-04-10 16:02:06 C#

如何在ASP.NETMVC中从HttpModule执行控制器操作?我有以下IHttpModule,我正在尝试弄清楚如何从控制器针对给定的绝对或相对URL执行操作。publicclassCustomErrorHandlingModule:IHttpModule{#IHttpModule的区域实现publicvoidInit(HttpApplicationcontext){context.Error+=(sender,e)=>OnError(newHttpContextWrapper(((HttpApplication)sender).Context));}publicvoidDispose(){}publicvoidOnError(HttpContextBasecontext){//根据HttpStatus代码等确定要显示的错误资源。//为了简洁起见,我将针对这个SO问题对其进行硬编码。conststringerrorPage=@"/Error/NotFound";//现在以某种方式为该路由执行正确的控制器。//返回html响应。}}如何才能做到这一点?与此类似的东西应该可以完成这项工作:publicvoidOnError(HttpContextBasecontext){context.ClearError();context.Response.StatusCode=404;varrd=newRouteData();rd.Values["controller"]="error";rd.Values["action"]="notfound";IController控制器=newErrorController();varrc=newRequestContext(context,rd);控制器。执行(rc);您可能还会发现以下相关答案有助于它的工作。我认为您需要使用HttpContext.Current.RewritePath这允许您更改要使用的文件的路径。这是在MVC2项目中创建的default.aspx。我使用它的方式与您相同,没有302的错误处理但现在无法访问我的代码。我将在星期一发布一些代码。您可以使用HttpContext:System.Web.HttpContext.Current.Response.Redirect("/Error/NotFound");您好,使用它让框架使用路由,所有组件执行该路由的代码://MVC3runningonIIS7+if(HttpRuntime.UsingIntegratedPipeline){context.Server.TransferRequest(url,true);}else{//PreMVC3context.RewritePath(url,false);IHttpHandlerhttpHandler=newMvcHttpHandler();httpHandler.ProcessRequest(httpContext);理想情况下,此时请求处理已完成。如果不是这种情况,并且如果请求在asp.nethttp管道中进一步处理,此时使用它来停止请求并告诉asp.net我们已经完成了它:HttpApplicationapp=(HttpApplication)上下文。应用程序;app.CompleteRequest();;我不确定上下文是否有应用程序(我现在不在VS附近),但如果需要,您可以使用它来停止此模块中的请求。以上是C#学习教程:HowtoperformcontrolleractionsfromHttpModuleinASP.NETMVC?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: