我的BlogController中有以下方法:
[HttpGet]
[Route("blog/search/{searchTag:string}")]
public ActionResult Search(string searchTag) {
// Doing some search
}
我希望我的网址例如blog/search/programming
,这会让我看到一个页面,只显示标有programming
的帖子
我也有以下路线:
routes.MapRoute(
name: "BlogSearchRoute",
url: "{controller}/{action}/{searchTag}",
defaults: new {
controller = "Blog",
action = "Search"
}
);
很遗憾,我的参数无法正确映射,而且始终为null
。
更新
其他信息:这是我的RouteConfig
课程:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes) {
routes.LowercaseUrls = true;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("elmah.axd");
routes.MapRoute(
name: "BlogSearchRoute",
url: "{controller}/{action}/{searchTag}",
defaults: new { controller = "Blog", action = "Search", searchTag = UrlParameter.Optional });
routes.MapRoute(
name: "BlogRoute",
url: "{controller}/{action}/{id}/{title}",
defaults: new { controller = "Blog", action = "Post", title = UrlParameter.Optional});
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
答案 0 :(得分:1)
在自定义路线中,使用以下内容将searchTag
定义为可选:
routes.MapRoute(
name: "BlogSearchRoute",
url: "{controller}/{action}/{searchTag}",
defaults: new {
controller = "Blog",
action = "Search",
searchTag = UrlParameter.Optional
}
);
<强>更新强>
您应该在所有自定义路线下方的底部定义Default
路线。
答案 1 :(得分:0)
我设法通过从我的方法中删除BlogSearchRoute
,[Route()]
属性并将searchTag
重命名为id