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

本文关键字:小数 属性 路由 | 更新日期: 2023-09-27 18:33:06

Current 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"的期望是什么类型,或者它正在选择它。

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

我做错了什么?

更新:

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

/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})$" }
    );

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

问题是 URL 中的.

默认情况下,如果存在.,则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>

尝试

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

我相信默认值是int.