【问题标题】:Attribute Routing with Multiple Leading Zero Decimals具有多个前导零小数的属性路由
【发布时间】:2015-02-02 21:07:38
【问题描述】:

当前操作结果:

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

我想使用网址:

/EvaluatorSetup/2014/001.3244

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

A.我不知道 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})$" }
    );

【问题讨论】:

  • 不知道,EvaluatorSetup 是做什么的?
  • 你确定不是.搞砸了路线吗?
  • 不...我不确定。正如我所说...这只是一个猜测...当时我不知道。
  • 查看/EvaluatorSetup/2014/0013244 是否有效。如果是这样,你知道它是.
  • 确实如此。没有“。”它确实会触发。 ...关于如何使用“.”触发路由的任何想法?

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


【解决方案1】:

问题在于 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>

【讨论】:

  • 嗯...还没有开始工作。尝试各种排列。
  • 这让我朝着正确的方向前进。我已经提交了对答案的编辑,使我获得了正确的路由。感谢您的帮助!
【解决方案2】:

试试

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

我相信默认是int

【讨论】:

  • 这不太奏效。看来,“。”正在弄乱路线。
猜你喜欢
  • 2014-10-18
  • 2018-12-31
  • 1970-01-01
  • 2016-09-22
  • 2012-10-31
  • 1970-01-01
  • 2013-11-02
  • 2014-04-15
  • 2014-03-02
相关资源
最近更新 更多