当前位置: 首页 > 知识库问答 >
问题:

ASP.NET MVC 5 捕获未定义参数的全覆盖路由

郭凯
2023-03-14

我有一个带有可选id参数的默认路由,该参数与许多控制器方法相匹配,这是所需的。

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
);

大多数控制器将id参数定义为int而不是可为空的int。例如:

public ActionResult Detail(int id)
{
  var model = GetModel(id);
  return View(model);
}

问题是,在这个大型Web应用程序中,偶尔会有一些错误的代码将用户引导到没有id的路径。例如,/ControlllerName/Detail。调用默认路由,但由于缺少参数而记录异常:

System.ArgumentException:参数字典包含方法'System.Web.Mvc.ActionResultDetail(Int32)'的不可空类型'System.Int32'的参数'id'的空条目

首先,我们将努力找出为什么会发生这样的请求,但我也希望避免记录异常,并显示404页而不是500页。我看到的问题为未知的控制器或操作提供了解决方案,但不是默认路由定义为可选的参数,而是操作方法定义为必需的参数。

我尝试在默认值之前添加我的“catchall”路由,id值为0:

routes.MapRoute(
  name: "CatchAll",
  url: "{controller}/{action}",
  defaults: new { controller = "Home", action = "Index", id = 0 },
);

这可以防止异常,但我想显示一个404错误页面。是否有任何方法可以在路由配置中做到这一点,而不是更改每个操作方法以期望int? id,然后重定向到404页面,如果!id.HasValue

共有1个答案

丌官运诚
2023-03-14

在我的上一个项目中,我遇到了类似的问题。这是对我有用的。

试试用int?同时排除参数。

如果它不起作用,请使用字符串,然后将其转换为整数。

[HttpGet]
public ActionResult MyFunction(string val)
{
   int n = Convert.ToInt32(val);
   ...logic
}

用PagedList实现分页时。MVC我用了< code>int?页面,并且它没有抛出异常。

 类似资料:
  • 我遇到了一个HTML/JavaScript的问题,在过去的7个小时里,我在web上找不到一个解决方案,尽管有人问过类似的问题!所有的解决方法都没有帮助我。 我的问题是以下错误:未捕获的ReferenceError:HtmlDivelement.onClick中未定义函数 当我按下一个应该触发该功能的按钮时,我会得到这个错误。该函数称为onclick,onclick属性附加到一个div对象。 nul

  • 我试图在下面的代码中覆盖catch块,但我无法。我知道在读/写文件时需要引起IOException,但我不能这样做。而且,我不能使用PowerMockito来覆盖静态方法,因为我使用的是JUnit5。有人能帮忙吗? 这是我编写的一个测试用例,但它返回了这个错误-org.mockito.exceptions.Misusing.MissingMethodInvocationException:when

  • 问题内容: 我在简单的jsp上遇到此错误:未捕获的ReferenceError:未定义$ 我只是试着在eclipse上的其他项目上调用服务,但似乎不起作用。 代码在这里: 更新: 尝试使用Google CDN的jQuery,但仍然无法正常工作 未捕获的ReferenceError:$未定义sendobject @ index.jsp:15onclick @ index.jsp:28 因为该问题的所

  • 问题内容: 我正在尝试将Admin Widget与两个DateField一起使用在我的配方中,但是只有第一个可以正确显示Widget,而另一个则出现错误: DateTimeShortcuts.js:205未捕获的ReferenceError:未定义django (指示的行是: ) 这是我的模板头: 我的模型领域: 和我的形式课: 我想这是某种渲染规则,但我完全感到困惑。欢迎任何帮助! 问题答案:

  • 我是新手,所以请帮忙。我在尝试使用angular with angular ng controller标记运行简单代码时出错,我在html中显示一个变量,该变量在javascript文件中定义为: 并在html中显示如下:html页面 chrome控制台上的错误如下: 未捕获的引用错误:系统未定义(匿名函数)@angular2.js:3098 指向angular2js中的某些函数: 我不明白这个问

  • 我得到一个错误“Uncathed ReferenceError:regeneratorRuntime未定义”。请帮助我找出错误,以及如何解决它。