Asp.net mvc路由在通配符末尾删除数字文件夹

时间:2010-06-11 18:06:20

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

所以我们有一个路由设置,最后有一个通配符来捕获文件路径,路径可能如下所示:

/ {browserName} / {browserVersion} / {区域设置} / {*}的packageName

当我们尝试以下路径时会出现问题:

/FF/3/en-US/scripts/packages/6/super.js

最终以packageName传递给控制器​​的是:

/scripts/packages/super.js

使用路线测试程序也会发生这种情况,所以我们完全不知道为什么会这样。如果你用一个字符串替换6,它就可以工作,如果你在6之前添加另一个数字文件夹它会被包括在内,所以如果最后一个文件夹是数字的话它似乎只是删除。有谁知道这是为什么?

1 个答案:

答案 0 :(得分:1)

我在VS2008中创建了默认的asp.net mvc2项目并更改了以下代码: 在global.asax.cs中我有这段代码:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "test", // Route name
            "{browserName}/{browserVersion}/{locale}/{*packageName}",
            new { controller = "Test", action = "Index", browserName = "IE", browserVersion = "8", locale = "en-US" , packageName = UrlParameter.Optional } // Parameter defaults
        );
    }

然后我添加了一个TestController:

public class TestController : Controller
{
    public ActionResult Index(
        string browserName, 
        string browserVersion, 
        string locale, 
        string packageName)
    {
        return View();
    }
}

空索引视图:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

&lt; asp:Content ID =“Content1”ContentPlaceHolderID =“TitleContent”runat =“server”&gt;     指数 &LT; / ASP:内容和GT; &lt; asp:Content ID =“Content2”ContentPlaceHolderID =“MainContent”runat =“server”&gt;     &LT; H2&GT;索引&LT; / H2&GT; &LT; / ASP:内容和GT;

为方便起见,我在site.master中为您指定的网址添加了一个链接:

<li><a href="/FF/3/en-US/scripts/packages/6/super.js">Test</a></li>

接下来,我在TestController的Index操作中设置断点。 当我将鼠标悬停在packageName参数上时,我会看到“scripts / packages / 6 / super.js”

所以我无法重现你的行为。

您使用的是VS2008和MVC2还是其他版本?