C# Url参数未映射
我的BlogController中有以下方法:C# Url参数未映射,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我的BlogController中有以下方法: [HttpGet] [Route("blog/search/{searchTag:string}")] public ActionResult Search(string searchTag) { // Doing some search } 例如,我希望我的url是blog/search/programming,这将使我进入一个页面,该页面仅显示标记有programming 我还有以下路线: routes.MapRoute( n
[HttpGet]
[Route("blog/search/{searchTag:string}")]
public ActionResult Search(string searchTag) {
// Doing some search
}
例如,我希望我的url是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 }
);
}
}
在自定义路线中,使用以下选项将
搜索标签定义为可选:
routes.MapRoute(
name: "BlogSearchRoute",
url: "{controller}/{action}/{searchTag}",
defaults: new {
controller = "Blog",
action = "Search",
searchTag = UrlParameter.Optional
}
);
更新
您应该在所有自定义路由的底部定义您的默认路由。我通过从我的方法中删除BlogSearchRoute
、[route()]
属性并将searchTag
重命名为id
来实现它,但这并不能解决问题。。。参数仍然是null
。如果删除属性[Route(“blog/search/{searchTag:string}”)]
?因为现在您在路由中定义路由,并将其作为controllerStill中的一个属性,但它不起作用。查看更新,可能会有所帮助。您可以添加整个routeconfig.cs内容吗?您必须将默认路线放在底部,现在它将始终使用此路线而不是其他自定义路线。无精确路线通常应为最后一条BlogSearchRoute
在Default
route之后时从不使用。旁注:搜索文本通常不作为URI“path”段的一部分,因为此处允许的字符受到限制;考虑显式指定显式URL,以最小化路由表中的冲突数量:<代码> URL:“博客/搜索/ {SeaStAtg}”< /代码>。与你的问题没有直接关系。