这就是我希望我的路线工作的方式:
http://example.com -> UpdatesController.Query()
http://example.com/myapp/1.0.0.0 -> UpdatesController.Fetch("myapp", "1.0.0.0")
http://example.com/myapp/1.0.0.1 -> UpdatesController.Fetch("myapp", "1.0.0.1")
http://example.com/other/2.0.0.0 -> UpdatesController.Fetch("other", "2.0.0.0")
我的控制器看起来像这样:
public class UpdatesController : Controller {
public ActionResult Query() { ... }
public ActionResult Fetch(string name, string version) { ... }
}
我尝试的路线配置是:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Fetch",
url: "{name}/{version}",
defaults: new { controller = "Updates", action = "Fetch" },
constraints: new { name = @"^.+$", version = @"^\d+(?:\.\d+){1,3}$" }
);
routes.MapRoute(
name: "Query",
url: "",
defaults: new { controller = "Updates", action = "Query" }
);
但只有第一个例子有效。其他应调用Fetch
操作方法的方法都会因404而失败。
我做错了什么?
(我也尝试过没有路线限制,但没有区别)
答案 0 :(得分:1)
将以下代码添加到web.config,因为您的网址包含点值(1.0.0.0)
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
另一种方式
你可以通过属性路由来完成。
启用属性路由,在RouteConfig.cs中写下以下代码
routes.MapMvcAttributeRoutes();
在控制器中你的Action看起来像这样
[Route("")]
public ActionResult Query()
{
return View();
}
[Route("{name}/{version}")]
public ActionResult Fetch(string name, string version)
{
return View();
}