在ASP.NET MVC 5上,我有以下控制器:
[Route("500", Name="InternalError"), HttpGet]
public virtual ActionResult Internal() {
ErrorInternalModel model = new ErrorInternalModel("Internal error")
Response.StatusCode = (Int32)HttpStatusCode.InternalServerError;
return View(model);
} // Internal
在我自己的HandleErrorModule上,我有以下内容:
public void Init(HttpApplication application) {
RouteData data = new RouteData();
data.Values["controller"] = "error";
data.Values["action"] = "internal";
((IController)new ErrorController()).Execute(new RequestContext(new HttpContextWrapper(application.Context), data));
}
我收到了错误:
System.Web.Mvc.dll中发生了'System.Web.HttpException'类型的异常,但未在用户代码中处理
其他信息:在控制器上找不到公共操作方法“内部” 'MVCPRJ.ErrorController'。
我能够使用以下内容显示视图:
System.Web.HttpContext c = System.Web.HttpContext.Current;
c.RewritePath("/500", false);
c.Server.TransferRequest("/500", true);
所以路线存在......
问题是这样我需要在模块中对路径进行硬编码。
我想从行动中得到路线......
我也试图通过名字来获取它。请注意,路径名称为“InternalError”...
但没有运气......任何想法如何解决这个问题?
谢谢你, 米格尔
答案 0 :(得分:0)
我注意到的第一件事是你没有定义虚方法的返回值。
示例:
public partial class ErrorController : Controller {
[Route("500"), HttpGet]
public virtual ActionResult Internal() {
Return View();
}
}
如果没有定义操作,您的路由也可能未设置为自动路由到所需页面。更多信息可能有助于找到您遇到的问题。
答案 1 :(得分:0)
尝试注释掉这一行,它适用于我
[Route("500", Name="InternalError"), HttpGet]