MVC动作没有被调用

时间:2014-07-07 12:28:34

标签: asp.net-mvc

我只有一个控制器,只在我的例子中有一个动作,如下所示:

//
// 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 ..

有谁能说明为什么会这样?

3 个答案:

答案 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