ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404
Posted
技术标签:
【中文标题】ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404【英文标题】:ASP.Net MVC 2 RC2: Custom route returns 404 when all optional parameters are null 【发布时间】:2011-01-18 21:05:03 【问题描述】:当我使用以下路由导航到以下 URL 时收到 404 错误:
http://localhost:53999/properties/
但是,以下所有内容都正确路由到我的控制器中的 List 操作:
http://localhost:53999/properties/usa/new-york/manhattan/12
http://localhost:53999/properties/usa/new-york/manhattan
http://localhost:53999/properties/usa/new-york
http://localhost:53999/properties/usa
public static void RegisterRoutes(RouteCollection routes)
routes.IgnoreRoute("resource.axd/*pathInfo");
//properties
routes.MapRoute(
"Properties",
"Properties/country/state/city/id",
new
controller = "Properties",
action = "List",
country = UrlParameter.Optional,
state = UrlParameter.Optional,
city = UrlParameter.Optional,
id = UrlParameter.Optional
);
//default
routes.MapRoute(
"Default", // Route name
"controller/action/id", // URL with parameters
new controller = "Home", action = "Index", id = "" // Parameter defaults
);
在 PropertiesController.cs 中:
public ActionResult List(string country, string state, string city, string id)
return View();
有人知道我错过了什么吗?看起来它应该只是去默认操作,但它显然没有......
【问题讨论】:
【参考方案1】:布拉德威尔逊在这篇文章中回答了这个问题:http://forums.asp.net/p/1527697/3690295.aspx#3690295
“不,问题是您的磁盘上有一个 Properties 文件夹,因此它通过标准调度程序(而不是 MVC)进行调度,然后因为找不到默认文档而出现 404。”
【讨论】:
【参考方案2】:你试过 Phil Haack 的 Route Debugger 吗?它可以帮助您确定发生了什么。
【讨论】:
谢谢,是的,实际上我刚刚尝试过,它似乎可以识别正确的控制器和操作,但它仍然会抛出 404。这可能是一个错误,因为我能够通过更改从“属性”到其他任何内容的前导路由关键字。可能是关键字被保留或其他什么......不知道。我用不同的前导路由关键字测试了整个东西,它工作得很好。很奇怪,但它现在正在工作。 :)【参考方案3】:您也可以尝试以下方法(因为您使用的是 MVC 1.0)。
在当前路线上方添加路线:
routes.MapRoute(
"Properties", "Properties", new controller = "Properties", action = "List"
);
并向控制器添加重载的ActionResult List()
方法:
public ActionResult List()
return View();
【讨论】:
我也以为他在使用 MVC 1.0 :) 但他在标题中说 MVC 2。奇怪的是我们都错过了。 我完全按照您的方式尝试了它,但是 VS 抱怨我已经有一个名为“Properties”的路由,所以我将其更改为“DefaultProperties”以赋予它不同的东西。不幸的是,当我直接访问 localhost:53999/properties 时,我仍然得到 404。但是,一旦我有一个可选参数的值,它就会被路由到操作没有问题。附:是的,我正在使用 MVC 2 RC2..【参考方案4】:而不是通过
(string)null
尝试通过
UrlParameter.Optional
如 Phil Haacks 帖子 here 中所述。我不知道这是否能解决问题,因为我目前无法对其进行测试。
【讨论】:
这在 MVC 1.0 中不可用。 请注意,UrlParameter.Optional 仅适用于 2 月初刚刚发布的 MVC 2 RC 2。 @çağdaş:OP 专门说 MVC 2。 @Dan Atkinson 啊,我在评论之前又看了一遍帖子正文,但显然不是标题。 我用 UrlParameter.Optional 尝试过(这就是我从现在开始的方式,谢谢 Simon),但是当我转到 localhost:53999/properties 时它仍然返回 404以上是关于ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 传递多个可选参数 field=value
具有 HTML5 模式和 ASP.Net MVC 的 AngularJS 可选 URL 参数
如何使用 ASP.NET Core RC2 MVC6 和 IIS7 获取当前 Windows 用户