我目前正试图以下列方式进行路线。
到目前为止,我有以下代码:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
routes.MapRoute(
name: "NewsIndex",
url: "News",
defaults: new { controller = "News", action = "Index" },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
routes.MapRoute(
name: "NewsView",
url: "News/{id}",
defaults: new { controller = "News", action = "_", id = UrlParameter.Optional },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
routes.MapRoute(
name: "PageShortCut",
url: "{id}",
defaults: new { controller = "Home", action = "_", id = UrlParameter.Optional },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
如果我去/ Home / _ / About,我可以查看该页面,如果我去/关于,我只需要404.
这可能在mvc.net中吗?如果是这样,我将如何解决这个问题?
答案 0 :(得分:1)
尝试从UrlParameter.Optional
路线中删除PageShortCut
。您也可能需要重新排序路线。
这对我有用(作为最后两条路线):
routes.MapRoute(
name: "PageShortCut",
url: "{id}",
defaults: new { controller = "Home", action = "_" },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "TheSportsOfficeWeb.Controllers" }
);
我的控制员:
public class HomeController : Controller {
public string Index(string id) {
return "Index " + id;
}
public string _(string id) {
return id;
}
}
当您告知路由引擎id
不是路由的可选项时,除非id
存在,否则它不会使用该路由。这意味着对于没有任何参数的网址,引擎将落入Default
路由。