为什么要为我的页面调用两个ActionResult方法?

时间:2009-10-21 19:05:35

标签: asp.net-mvc friendly-url

我有一个asp.net-mvc应用程序,其中包含由我的'用户'控制器提供的以下aspx页面:Index.aspx,User.aspx,UsersIntoActivity.aspx和UsersUsingLocation.aspx。

在我的Global.ashx.cs中,我设置了以下路线:

routes.MapRoute(
            "UsersHome",
            "Users",
            new { controller = "Users", action = "Index" });

routes.MapRoute(
            "Users",
            "Users/{id}/{name}",
            new { controller = "Users", action = "User", id = "", name = "" });

routes.MapRoute(
            "UsersUsing",
            "Users/Using/{locationId}/{name}",
            new { controller = "Users", action = "UsersUsingLocation", locationId = "", name = "" });

routes.MapRoute(
            "UsersInto",
            "Users/Into/{activityId}/{name}",
            new { controller = "Users", action = "UsersIntoActivity", activityId = "", name = "" });

问题在于,当我尝试通过网址的网站/ Users / Into / 1 / some-activity'或网站/ Users / Using / 1 / some-location访问UsersIntoActivity.aspx或UsersUsingLocation.aspx时,相应的ActionResult正在调用方法,但之后也会调用User方法。

3 个答案:

答案 0 :(得分:2)

我认为该路由的第二个请求是出于某种原因来自浏览器。尝试使用Fiddler2捕获浏览器和Web服务器之间的流量。这可以帮助您排除发生301/302重定向的可能性,或者在呈现的HTML中存在对其他资源的引用(例如在图像,脚本或链接标记中)。

答案 1 :(得分:2)

继gWiz的回复之后,作为在IIS中应用映射扩展后的一般规则(对于IIS 5和6),我然后右键单击图像和/或脚本FOLDERS的属性,然后删除刚刚添加的aspnet_isapi扩展。现在不会为这些文件夹中的文件请求调用MVC路由。

或者在全局asax中设置忽略路由扩展名。

this.Routes.IgnoreRoute("Content/{*pathInfo}");
//e.g if your images, css, scripts are in a content folder

答案 2 :(得分:1)

考虑使用路线调试器检查路线:

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

那应该给你答案,真正叫做什么。