【问题标题】:What sets the default parameter value for this MVC3 action method?什么设置了这个 MVC3 操作方法的默认参数值?
【发布时间】: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


    【解决方案1】:

    关于第二个问题:将ChildActionOnlyAttribute 放在此操作之上 - 您将无法从浏览器请求它。

    【讨论】:

    • 我认为这是一个赢家,但它不会起作用,因为我的最后一段。当我清除路由字典并将其发送到错误控制器时,它不再是一个子节点,因此应用此属性会产生一个 InvalidOperationException 并带有消息“操作'索引'只能由子请求访问。”跨度>
    猜你喜欢
    • 2013-10-07
    • 2010-10-02
    • 1970-01-01
    • 2018-04-04
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2019-10-22
    相关资源
    最近更新 更多