1

我有一条路线:

        routes.MapRoute("ResetPasswordConfirm", "reset-password-confirm", new { controller = "Membership", action = "ResetPasswordConfirm" });

和代码

    public ActionResult ResetPasswordConfirm(int userid, string key)
    {
        // ...
    }

在我的应用程序中。所以我有 url 像这样执行:

http://localhost/reset-password-confirm?userid=1&key=bla_bla_something

这绝对没问题,直到有人决定去

http://localhost/reset-password-confirm

...看看会发生什么。ASP.NET 将产生可预测的错误:

参数字典包含不可为空类型“System.Int32”的参数“userid”的空条目...

它也可以通过搜索机器人尝试抓取所有可能的 url 来完成。没关系,但是在野外使用应用程序时会产生很多错误。我想避免这种情况,但是对于为此类错误的每种可能情况编写存根感到不舒服。

有什么优雅的方法吗?谢谢。

4

2 回答 2

2

另一种方法是处理全局错误,只需<customErrors mode="On"></customErrors>在您的视图文件夹上设置web.config并创建一个。MVC3 模板实际上包含该页面。Error.cshtmlShared

另一方面,如果你想更具体,你应该尝试Action Filters,这是一种处理错误的好方法。

[HandleError(View = "YourErrorView", ExceptionType=typeof(NullReferenceException))]
public ActionResult ResetPasswordConfirm(int? userid, string key)
{
      if (!userid.HasValue)
         throw new NullReferenceException();
      // ...
}
于 2012-07-03T19:51:50.113 回答
1

为您的参数使用可空值,即:

public ActionResult ResetPasswordConfirm( int? userid, string key)

于 2012-07-03T19:37:15.063 回答