Url参数未映射

时间:2015-06-29 15:06:47

标签: c# asp.net-mvc asp.net-mvc-routing

我的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 }
            );
        }
    }

2 个答案:

答案 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

来实现目标