当前的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})$" }
);
答案 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
。