我在.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
。
答案 0 :(得分:1)
关于第二个问题:将ChildActionOnlyAttribute
置于此操作之上 - 您将无法从浏览器中请求它。