Asp.net mvc I';我试图从mvc5中的url向控制器传递一个值

Asp.net mvc I';我试图从mvc5中的url向控制器传递一个值,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,在ASP.NET MVC 5中将字符串变量传递给控制器时遇到问题。据我所知,我的代码应该可以工作,但无论我做什么,控制器都只会收到一个空值 首先,我在默认路线上方有我的route.config,以下是我的路线: routes.MapRoute( name: "Serial number", url: "serial/{letterCase}", defaults: new { controller = "Home", action = "Serial",

在ASP.NET MVC 5中将字符串变量传递给控制器时遇到问题。据我所知,我的代码应该可以工作,但无论我做什么,控制器都只会收到一个空值

首先,我在默认路线上方有我的
route.config
,以下是我的路线:

routes.MapRoute(
       name: "Serial number",
       url: "serial/{letterCase}",
       defaults: new { controller = "Home", action = "Serial", letterCase="upper" }
);
这是我在家庭控制器中的简单代码

public ActionResult Serial(string letterCase)
{
        var serial = "ASPNETMVC5ATM1";

        if(letterCase == "lower")
        {
            return Content(serial.ToLower());
        }

        return Content(serial);
}

因此,从理论上讲,如果我浏览到url
home/serial/lower
,它应该接受较低的字符串,但它不起作用,我甚至尝试使用“home/serial?lower”,但也不起作用。

您的路由定义说要匹配的url是
serial/{lettercase}
。它没有提到任何关于控制器名称的内容!因此它将匹配
yoursite.com/serial/lower
yoursite.com/serial/anystring
,但不匹配

因此,使用当前的路由定义,您可以访问您的操作方法,而不需要url中的home(控制器名称)。这就是yoursite.com/serial/somestring

如果要使其使用
home/serial/lower
url模式,则需要将控制器部分添加到路由定义中的url中

下面的命令将任何对
home/serial/{anystring}
的请求定向到home控制器中的串行方法

 routes.MapRoute(
            name: "Serial number",
            url: "home/serial/{letterCase}",
            defaults: new { controller = "Home", action = "Serial", 
                                                                      letterCase="upper" }
           );

此外,此特定管线定义应始终高于默认管线定义。顺序真的很重要。

您的路由定义说要匹配的url是
serial/{lettercase}
。它没有提到任何关于控制器名称的内容!因此它将匹配
yoursite.com/serial/lower
yoursite.com/serial/anystring
,但不匹配

因此,使用当前的路由定义,您可以访问您的操作方法,而不需要url中的home(控制器名称)。这就是yoursite.com/serial/somestring

如果要使其使用
home/serial/lower
url模式,则需要将控制器部分添加到路由定义中的url中

下面的命令将任何对
home/serial/{anystring}
的请求定向到home控制器中的串行方法

 routes.MapRoute(
            name: "Serial number",
            url: "home/serial/{letterCase}",
            defaults: new { controller = "Home", action = "Serial", 
                                                                      letterCase="upper" }
           );

此外,此特定管线定义应始终高于默认管线定义。顺序确实很重要。

确保您已将此特定路线置于任何其他路线定义之前:

routes.MapRoute(
    name: "Serial number",
    url: "serial/{letterCase}",
    defaults: new { controller = "Home", action = "Serial", letterCase="upper" }
);

现在,如果您调用
serial/lower
(和not
home/serial/lower
),您应该会得到预期的结果。

确保您已将此特定路由放置在任何其他路由定义之前:

routes.MapRoute(
    name: "Serial number",
    url: "serial/{letterCase}",
    defaults: new { controller = "Home", action = "Serial", letterCase="upper" }
);
现在,如果您调用
serial/lower
(和not
home/serial/lower
),您应该会得到预期的结果