我有一个具有多个操作的控制器(产品),一些具有必需的参数(编辑,详细信息,历史记录),有些具有可为空的参数(创建,搜索)。具有可选参数的默认路由将路由到所有操作,但是如果用户输入的URL指向具有必需参数(即产品/历史记录)的控制器/操作,则会引发错误。处理此问题的最佳地点是什么?我应该:
将具有必需的with参数的动作的路由定义为具有必需的URL参数?
routes.MapRoute(
name: "ProductParamRequired",
url: "Product/History/{id}",
defaults: new { controller = "Product", action = "History"}
);
将操作更改为具有可选参数,并返回错误的请求。
public ActionResult History(int? id)
{
if (id == null)
{
throw new HttpException(400, "BadRequest");
}
让应用程序抛出500个内部服务器错误,并向用户显示(当然是自定义错误页面)?
谢谢你,星期五快乐!
答案 0 :(得分:1)
如果需要,请绝对将其作为路由的一部分。如果某个请求甚至没有您期望的数据,请不要接受处理它的想法。与在应用程序边缘进行验证相比,修复已放入应用程序中的不良数据的成本要高得多。始终尽早验证输入。
2
不是一个好主意,因为您最终将为每个操作和每个所需的参数复制此模式。
3
不是一个好主意,因为您甚至没有尝试验证数据。那总是自找麻烦。
1
很好,因为它大概会退回到您的默认路由product/history
。
顺便说一句,在明确定义路线时,使用attribute routing可以避免维护大量的RouteConfig
。