我只有一个控制器,只在我的例子中有一个动作,如下所示:
//
// GET: /Home/
public ActionResult Index(string source,string id)
{
return View();
}
我为此操作注册了2条路线,例如 - :
routes.MapRoute(
name: "Default2",
url: "{source}/{id}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "",
defaults: new { controller = "Home", action = "Index", source="source1", id = UrlParameter.Optional }
);
当我调用默认值时,它会调用Index
操作,这是正常的
当我这样打电话时,/source1/12
- 它有效。
但是当我这样称呼/source1/12.0
时 - 它不起作用并显示404 ..
有谁能说明为什么会这样?
答案 0 :(得分:0)
它可能将.0解释为文件扩展名,从而在磁盘上查找文件。你能替换“。”使用“_”进行重定向,并在您的操作方法中替换回来?否则,您必须查看路由不要将“.0”解释为文件扩展名的方法。不确定我的头顶究竟有多远......
MVC将这样的错误路由到特殊方法。一个在控制器中:HandleUnknownAction,当动作无法匹配时调用。你可以覆盖它并处理动作(记录它等)。
答案 1 :(得分:0)
查看this文章,它有适合您的解决方案:
从链接:
<configuration>
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true"/>
<!-- ... your other settings ... -->
</system.web>
</configuration>
答案 2 :(得分:0)
将ROuteCOnfig更改为:
routes.MapRoute(
name: "Default2",
url: "{source}/{id}/",
defaults: new { controller = "Home", action = "Index" }
);
应解决您的问题。
您还可以查看 SO Thread