具有多个前导零小数的属性路由

时间:2014-12-04 20:22:24

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

当前的ActionResult:

[Route("EvaluatorSetup/{evalYear}/{department}")]
public ActionResult RoutedEvaluatorSetup(int evalYear, string department)
{
    return EvaluatorSetup((int?)evalYear, department);
}

我想使用网址:

/EvaluatorSetup/2014/001.3244

其中{department}最终是一个字符串,但路由不会将{department}作为字符串。

一个。我不知道MVC期望什么类型" 001.3244"或者它正在捡起它的类型。

B中。我想将它维护为带有可选前导零的字符串,如示例所示。

我做错了什么?

更新

我的意思是,当我在返回行的代码中休息时,它永远不会触发。

/EvaluatorSetup/2014/foobar (WORKS!)

/EvaluatorSetup/2014/001.3244 (DOESN'T WORK!)

这让我相信我的路由不正确:

[Route("EvaluatorSetup/{evalYear}/{department}")]

具体来说,看起来001.3244并不是一个有效的字符串。所以我的问题是如何纠正这个问题:

[Route("EvaluatorSetup/{evalYear}/{department}")]
public ActionResult RoutedEvaluatorSetup(int evalYear, string department)

这样我才能进入uri:

/EvaluatorSetup/2014/001.3244

最好保持前导零。

我想到了这样的事情:

[Route("EvaluatorSetup/{evalYear}/{corporation}.{department}")]
然而,这是猜测。我甚至不知道这是否有效。

其他更新:

RouteConfig.cs中的旧路线(它似乎不再起作用)是这样的:

routes.MapRoute(
    "evaluations_evaluatorsetupget",
    "evaluations/evaluatorsetup/{evalyear}/{department}",
    new { controller = "evaluations", action = "evaluatorsetup", evalyear = @"^(\d{4})$", department = @"^(\d{3}\.\d{4})$" },
    new { evalyear = @"^(\d{4})$", department = @"^(\d{3}\.\d{4})$" }
    );

2 个答案:

答案 0 :(得分:13)

问题是网址中的.

默认情况下,如果存在.StaticFileHandler将处理请求并查找与文件系统上的路径匹配的文件名。要覆盖此行为,您可以将处理程序分配给您尝试使用的URL。例如,将以下内容添加到web.config:

<system.webServer>
<handlers>
  <add name="UrlRoutingHandler" path="/EvaluatorSetup/*" verb="GET" type="System.Web.Routing.UrlRoutingHandler" />
</handlers>
</system.webServer>

将强制以/EvaluatorSetup/开头的任何请求使用UrlRoutingHandler(与MVC路由关联的处理程序)。

**解决方案补充**

当我将以下内容添加到web.config中的httpRuntime元素时,我发现此解决方案有效:

<system.web> 
    <httpRuntime relaxedUrlToFileSystemMapping="true" />
</system.web>

答案 1 :(得分:0)

尝试

[Route("EvaluatorSetup/{evalYear}/{department:string}")]

我认为默认值为int