Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Url参数未映射_C#_Asp.net Mvc_Asp.net Mvc Routing - Fatal编程技术网

C# Url参数未映射

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

我的BlogController中有以下方法:

[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}”< /代码>。与你的问题没有直接关系。