我有一个asp.net mvc 1.0站点,它提供来自2级层次结构/类别/文章的一些内容
当事情正常工作时,文章会映射到视图并呈现视图.但是,当url符合路由条件但视图不存在时,会引发异常,我无法陷入Controller操作.
路由:
routes.MapRoute(
"Article",
"{category}/{article}.aspx",
new { controller = "MyController", action = "Article" }
);
Run Code Online (Sandbox Code Playgroud)
MyController动作:
public ActionResult Article(string category, string article)
{
string path = string.Format("~/Views/{0}/{1}.aspx", category, article);
ViewResult vr = View(path);
return vr;
}
Run Code Online (Sandbox Code Playgroud)
但是,当找不到视图时,System.InvalidOperationException会生成一个我无法在Controller Action中捕获的a.
异常详细信息:System.InvalidOperationException:找不到视图'〜/ Views/my-category/my-article-with-long-name.aspx'或其主文件.搜索了以下位置:〜/ Views/my-category/my-article-with-long-name.aspx
我可以在Application_Error()方法中捕获错误global.asax.cs但是:
xandy,Greg,我感谢你的回答.本文(aspnet mvc中基于资源的404错误的策略)帮助我以一种非常干净的方式推导出我正在寻找的解决方案.我需要做的就是覆盖Controller.OnException.由于我只有一个控制器,我需要行为,我只需要覆盖该控制器中的OnException.
话虽这么说,我的解决方案治疗的症状不是疾病,正如你们所建议的那样,最好在调用此方法之前检查文件是否存在.查看路径.
这是我用来治疗症状的代码:)
protected override void OnException(ExceptionContext filterContext)
{
//InvalidOperationException is thrown if the path to the view
// cannot be resolved by the viewengine
if (filterContext.Exception is InvalidOperationException)
{
filterContext.ExceptionHandled = true;
filterContext.Result = View("~/Views/Error/NotFound.aspx");
filterContext.HttpContext.Response.StatusCode = 404;
}
base.OnException(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
我无法解决的一个问题是如何以干净的方式显示NotFound视图.它通常通过ErrorController NotFound Action访问.我不得不硬编码它的路径.我可以忍受这个,但想知道是否有可能没有HC路径.
| 归档时间: |
|
| 查看次数: |
5294 次 |
| 最近记录: |