如何在ASP.NETMVC中传递字符串作为参数

如何在ASP.NETMVC中传递字符串作为参数,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,在本例中,我试图制作一个在URL中传递string参数的简单示例,不使用queryString。首先,我在RouteConfig.cs文件中添加了一个新的MapRoute,作为 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Hom

在本例中,我试图制作一个在URL中传递
string
参数的简单示例,不使用
queryString
。首先,我在
RouteConfig.cs
文件中添加了一个新的
MapRoute
,作为

           routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
           routes.MapRoute(
                  name: "app",
                  url: "{controller}/{action}/{name}"
            );
在控制器中,我有

 public class AppController : Controller
    {
        public string Index(string name)
        {
            return HttpUtility.HtmlEncode("Hello " + name );
        }
    }
但是视图没有显示字符串参数。例如,像这样的URL
http://localhost:59013/App/Index/Ali
仅返回
你好

为什么会这样

更新
首先,您需要更改已注册路由的顺序,以便默认为最后一个

其次,你的
应用程序
路线模式是错误的,并且总是与默认路线冲突。你最好把它的样式改成

url: "App/Index/{name}"
或者是对更友好的人

url: "App/{name}"
都有

defaults: new { controller = "App", action = "Index" }
因此,您的路线将如下所示:

routes.MapRoute(
    name: "app",
    url: "App/{name}",
    defaults: new { controller = "App", action = "Index" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

请参见更改已注册路线的顺序。默认值必须是最后一个。但是,您的
应用程序
路线模式是错误的,并且将始终与默认路线冲突。您最好将其模式更改为
url:“App/Index/{name}”
(或者更改为更友好的
url:“App/{name}”
),这两种模式都具有
默认值:new{controller=“App”,action=“Index”}
。谢谢Haim770,您更改自定义路由优先级的做法是正确的,解决了这个问题,但是我如何摆脱url中的
\index
?我已经添加了
defaults:new{action=“Index”}
,但是当我尝试类似
http://localhost:59013/App/Ali/
请将修改后的路线添加到问题中。您可以检查更新吗?请查看我的答案。您缺少
controller=“App”
部分。@MonaCoder,您的路线与答案中的路线完全一样吗?您正在尝试的Url是什么?我在“/”应用程序中遇到
服务器错误。
错误我修改了默认值,但仍然无法在没有index@MonaCoder,错误说明了什么?Url是什么?我知道我已经修好了,但这不是有点特别吗?我的意思是,假设我有另一个名为
MapControoler
的控制器,那么我也必须为此编写相同的
MapRoute()
?有没有办法让它更通用?@MonaCoder,您已经通过默认路径拥有了“通用”功能,可以使用
{controller}/{action}
模式实现任何操作。一旦您需要在最后一段(
{name}
而不是
{id}
)中使用不同的参数名来实现特定的操作,框架必须能够区分它们,这将意味着对更特定的操作有一个独特的Url模式。但是,是否有基于参数索引而不是名称的解决方案值得一看(您始终可以使用查询字符串:
/App/index?name=…
)。
routes.MapRoute(
    name: "app",
    url: "App/{name}",
    defaults: new { controller = "App", action = "Index" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);