属性路由在MVC4中不起作用

时间:2017-01-19 08:00:51

标签: c# asp.net-mvc-4 asp.net-mvc-routing attributerouting

我在Attribute Routing申请中使用MVC4。我已设置路线[Route("test-{testParam1}-{testParam2}")]。这里`{testParam2}'可能包含“测试”一词。例如,如果我输入如下的网址,

localhost:33333/test-temp-test-tempparam2

这给了我404错误。在网址中,此处{testParam2}有两个单词test tempparam2,格式为test-tempparam2。当test字位于{testParam2}的最后位置时,它运行良好。这意味着如果网址像.../test-temp-tempParam2-test那样运行良好。但是下面给出错误。 .../test-temp-test-tempParam2

以下是可能有用的代码......

[Route ("test-{testParam1}-{testParam2}")]
public ActionResult Foo (int testParam2) {...}

现在尝试关注两个网址。

  1. localhost:(port)/test-temp-1

  2. localhost:(port)/test-test-temp-1

  3. 在我的情况下,第二个错误。在这种情况下,第一个参数的格式为test-temp test temp。首先运行良好。

    如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

OP表示路径模板中的最后一个参数是int

使用路线约束。

路径约束允许您限制路径模板中的参数匹配方式。一般语法是{parameter:constraint}。例如:

[Route ("test-{testParam1}-{testParam2:int}")]
public ActionResult Foo (int testParam2) {...}

因此,在尝试关注两个网址时。

localhost:(port)/test-temp-1

localhost:(port)/test-test-temp-1

第一个匹配路线数据{testParam1 = temp}-{testParam2 = 1}

第二个匹配路线数据{testParam1 = test-temp}-{testParam2 = 1}

答案 1 :(得分:0)

您在Global.asax文件中是否有以下代码?

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

    routes.MapMvcAttributeRoutes();

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