Asp.net mvc 4 Asp.Net MVC路由在Url中传递控制器

Asp.net mvc 4 Asp.Net MVC路由在Url中传递控制器,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我试着写自定义路由。我总是有404错误。我读了关于路由的文章,但没有弄明白。我想显示以下代码和名称等内容,它们必须介于a-Z和0-9之间。谢谢 {action}/{name}/details/kll219dkl routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "hom

我试着写自定义路由。我总是有404错误。我读了关于路由的文章,但没有弄明白。我想显示以下代码和名称等内容,它们必须介于a-Z和0-9之间。谢谢

{action}/{name}/details/kll219dkl

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

            routes.MapRoute(
                name: "test",
                url: "details/{name}",
                defaults: new { controller = "Test", action = "Details", name = "ujElk392ow" }
            );
而仅仅是为了证明这是有效的

 public ActionResult Details(string name)
 {
    return Content(name);
 }
那么:

routes.MapRoute(
    name: "test",
    url: "{controller}/details/{name}",
    defaults: new { controller = "Test", action = "Details", name = String.Empty },
    constraints: new { name = @"^[a-zA-Z0-9]+$" }
);
这将给你:

Url:                        Mapped Destination:
/Test/details/kll219dkl     TextController->Details(name: "kll219dkl")

除了布拉德回答。尝试更改路线的顺序。运行时采用适合请求的第一条路由。因此,路线必须从最确定的到最一般的定义。在您的订单中,运行时将始终采用默认路径。

谢谢您的回复,看起来不错。当我测试控制器/动作/参数工作但我不想显示控制器名称时,只显示动作/参数或控制器/参数动作总是常量。@显示:它总是同一个控制器吗?如果是这样,请从
url:
参数中删除
{controller}/
部分,并保留
默认值:
。请您可以编写我尝试过的控制器/参数或操作/参数路线图,但仍然不起作用。假设
TestController{Details(name)}
只需从我的答案中删除
{controller}//code>,然后访问
details/kll219dkl
。谢谢brad,我确实放弃了这个问题。这个问题对我不适用,我使用的是默认路线图。也许将来我会做这个。