【发布时间】:2012-01-18 21:45:48
【问题描述】:
我在 Global.asax(MVC 3 网络项目)中定义了以下路由:
routes.MapRoute(
"BlogCategory", // Route name
"Blog/Category/{*category}", // URL with parameters
new { controller = "Blog", action = "Index", category = "" } // Parameter defaults
);
我的操作接受一个类别参数,如下所示:
public ViewResult Index(string category, int page = 1)
{
PostListViewModel viewModel;
if (string.IsNullOrEmpty(category))
{
....show all cats else show only the one passed in
这工作正常,并将类别传递给控制器,适当地过滤我的结果。
我的问题是当我创建的类别之一的类别名称看起来像这样时:
项目/实验室
(注意空格和斜线)
这会创建一个类似这样的 URL:
/Blog/Category/Projects%20/%20Lab
当我点击链接时,我收到了这个错误:
描述:HTTP 404。您正在寻找的资源(或其之一 依赖项)可能已被删除,名称已更改,或者是 暂时不可用。请查看以下 URL 并制作 确保拼写正确。
请求的 URL:/Blog/Category/Projects/Lab
调试时永远不会到达索引动作。
我的问题是,我怎样才能做到这一点,或者我必须在创建类别名称时进行一些输入验证以防止这种情况发生?
【问题讨论】:
-
您是否考虑过传递类别 ID?
-
您肯定需要对输入的值进行修整。而不仅仅是检查空格...某些字符不会显示在 URL 中(“Ñ”或其他非英文字符)...请记住那里还有其他语言。所以,为了避免这一切......我建议你选择类别 ID。
标签: asp.net-mvc-3 model-view-controller routes space slash