我在.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?我如何防止它?
此操作的预期用途是,我的自定义错误处理程序替换路由字典,将控制器设置为"error",将操作设置为"Index",并提供正确的参数,并调用ErrorController.Execute
。有没有更好的方法可以防止用户直接请求此路线?ChildActionOnlyAttribute
不起作用,因为替换路由字典并重新执行控件使其成为父操作。
更新:我通过创建一个自定义路由来解决这个问题,该路由提供了我的应用程序测试的默认异常,而不是测试null。这让我怀疑是MVC 3提供了System.Exception
。
关于第二个问题:将ChildActionOnlyAttribute
置于此操作之上-您将无法从浏览器请求它。