Parameters MVC5和动态路由问题

Parameters MVC5和动态路由问题,parameters,routing,asp.net-mvc-5,Parameters,Routing,Asp.net Mvc 5,我有一个非常奇怪和恼人的问题,我迫切需要一些帮助。我有一个动态路由,所有请求都将通过我的MVC应用程序。路线是这样的 routes.MapRoute( "FirstSpirit", "{locale}/{*PageUrl}", new { controller = "Site", action = "Page" }, new { PageUrl = @"^(.*)?$"

我有一个非常奇怪和恼人的问题,我迫切需要一些帮助。我有一个动态路由,所有请求都将通过我的MVC应用程序。路线是这样的

routes.MapRoute(
                "FirstSpirit",
                "{locale}/{*PageUrl}",
                new { controller = "Site", action = "Page" },
                new { PageUrl = @"^(.*)?$" } //^(.*)?$
                );
所以这很好,但是有两件事正在发生,我找不到直接的答案

首先,如果值为“en”,则不会填充{locale}参数。例如,如果我使用URL,那么值“es”将通过RoutedData值传递。但是,如果我使用URL,则值“en”无法通过。这适用于除“en”之外的所有其他值,我不知道为什么

我的另一个问题是,我需要能够使用相同的路由在URL中传递.html,但是如果我在URL中使用.html扩展名,MVC应用程序会自动抛出404,并且不会命中我的任何路由或控制器

有人能帮帮我吗?我有点疯了。很抱歉,如果之前已经回答过这个问题,我就是找不到关于这些问题的任何信息


谢谢

我有幸看了一下应用程序源代码。有趣的是,路由对我来说是正确的

此问题已在Windows Server 2012 R2数据中心(.NET v4.6[393297])上复制

我无法在Windows 10(.NET v4.6[393295])上复制

我从web.config中删除了以下内容:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

增加:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>

并将targetFramework从
4.5.2
更改为
4.5

此更改似乎解决了IIS没有将所有请求路由到应用程序这一事实。但是,“en”仍将从控制器操作作为一个catch-all参数接收的url中删除。只有当“en/”是url路径的第一部分时,才会删除此选项

e、 g

/something/en/index.html解析为“something/en/index.html”。
/en/index.html解析为“index.html”。

我的优势是查看了应用程序源代码。有趣的是,路由对我来说是正确的

此问题已在Windows Server 2012 R2数据中心(.NET v4.6[393297])上复制

我无法在Windows 10(.NET v4.6[393295])上复制

我从web.config中删除了以下内容:

  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

增加:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>

并将targetFramework从
4.5.2
更改为
4.5

此更改似乎解决了IIS没有将所有请求路由到应用程序这一事实。但是,“en”仍将从控制器操作作为一个catch-all参数接收的url中删除。只有当“en/”是url路径的第一部分时,才会删除此选项

e、 g

/something/en/index.html解析为“something/en/index.html”。 /en/index.html解析为“index.html”