【发布时间】:2012-03-07 21:53:09
【问题描述】:
我在 .NET 4.0 上的 MVC 3 应用有一个 ErrorController,其操作开始如下:
public ActionResult Index(Exception error, int? functionId, string viewMessage)
{
if (error == null && string.IsNullOrEmpty(viewMessage))
return RedirectPermanent(_DefaultErrorHtm);
// ...
}
我没有为此操作设置自定义路由,但是当我请求“http://localhost/error”时,error 参数不是null,而是始终是System.Exception,没有堆栈跟踪。是什么提供了这个默认值,MVC 3 还是 .NET 4.0?如何预防?
此操作的预期用途是我的自定义错误处理程序替换路由字典,将控制器设置为“错误”,将操作设置为“索引”并提供正确的参数,并调用ErrorController.Execute。有没有更好的方法来防止用户直接请求这条路线? ChildActionOnlyAttribute 不起作用,因为替换路由字典并重新执行控件使其成为父操作。
更新:我通过创建一个自定义路由来解决这个问题,该路由提供我的应用测试的默认异常,而不是测试 null。这让我怀疑是 MVC 3 一开始就提供了System.Exception。
【问题讨论】:
标签: asp.net-mvc-3 .net-4.0 asp.net-mvc-routing