控制器中未找到任何操作

时间:2013-12-06 16:42:15

标签: asp.net-mvc

在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”...

但没有运气......任何想法如何解决这个问题?

谢谢你, 米格尔

2 个答案:

答案 0 :(得分:0)

我注意到的第一件事是你没有定义虚方法的返回值。

示例:

public partial class ErrorController : Controller {
  [Route("500"), HttpGet]
  public virtual ActionResult Internal() {
    Return View();
  }
}

如果没有定义操作,您的路由也可能未设置为自动路由到所需页面。更多信息可能有助于找到您遇到的问题。

答案 1 :(得分:0)

尝试注释掉这一行,它适用于我

[Route("500", Name="InternalError"), HttpGet]