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

Asp.net mvc Asp.net mvc route会在通配符末尾删除数字文件夹,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc Routing,因此,我们有一个路由设置,在末尾有一个通配符来捕获文件路径,路由可能如下所示: /{browserName}/{browserVersion}/{locale}/{*packageName} 当我们尝试以下路径时,就会出现问题: /FF/3/en US/scripts/packages/6/super.js 最终作为packageName传递给控制器的是: /scripts/packages/super.js 使用route tester程序,这种情况也会发生,因此我们完全不知道这是为什么。如果

因此,我们有一个路由设置,在末尾有一个通配符来捕获文件路径,路由可能如下所示:

/{browserName}/{browserVersion}/{locale}/{*packageName}

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

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

最终作为packageName传递给控制器的是:

/scripts/packages/super.js


使用route tester程序,这种情况也会发生,因此我们完全不知道这是为什么。如果将6替换为字符串,则会起作用;如果在6之前添加另一个数字文件夹,则会将其包含在内,因此如果最后一个文件夹是数字文件夹,则会将其删除。有人知道为什么吗?

我在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" %>

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

所以我无法重现你的行为


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

您的global.asax中是否有可能存在其他可能冲突的路由?不,它找到了正确的路由,只是似乎降低了值。是的,我使用的是这些版本,我想它一定是我们的isapi过滤器或其他东西,因为您无法复制它,所以正在剥离它。。。我必须调查一下。。。
<li><a href="/FF/3/en-US/scripts/packages/6/super.js">Test</a></li>