我有一条路线:
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'的空条目...
也可以通过搜索机器人试图抓住所有可能的网址来完成。没关系,但在野外使用应用程序时会产生很多错误。我想避免这种情况,但是为这种错误编写针对每种可能情况的存根感到不舒服。
有没有优雅的方式呢?感谢。
答案 0 :(得分:2)
另一种方法是处理全局错误,只需在<customErrors mode="On"></customErrors>
上设置web.config
,然后在Error.cshtml
视图文件夹中创建Shared
。 MVC3模板实际上包含该页面。
另一方面,如果你想更具体一点,你应该尝试Action Filters
,这是处理错误的一种很酷的方法。
[HandleError(View = "YourErrorView", ExceptionType=typeof(NullReferenceException))]
public ActionResult ResetPasswordConfirm(int? userid, string key)
{
if (!userid.HasValue)
throw new NullReferenceException();
// ...
}
答案 1 :(得分:1)
将nullables用于您的参数,即:
public ActionResult ResetPasswordConfirm( int? userid,string key)