MVC5和动态路由问题

时间:2015-10-29 03:46:50

标签: parameters routing asp.net-mvc-5

我有一个非常奇怪和恼人的问题,我需要一些绝望的帮助。我有一个动态路由,所有请求都将在我的MVC应用程序中完成。路线看起来像这样

routes.MapRoute(
                "FirstSpirit",
                "{locale}/{*PageUrl}",
                new { controller = "Site", action = "Page" },
                new { PageUrl = @"^(.*)?$" } //^(.*)?$
                );

所以这很好,但有两件事情正在发生,我找不到直接答案。

首先,如果值为“en”,则不会填充{locale}参数。例如,如果我使用URL http://domain.com/es/index.html,那么值“es”将在routedata值中出现。但是,如果我使用URL http://domain.com/en/index.html,则值“en”不会通过。这适用于所有其他值,但“en”,我无法弄清楚原因。

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

有人可以帮助我,因为我对此有点疯狂。很抱歉,如果之前已经回答过,但我在这些问题上找不到任何内容。

由于

1 个答案:

答案 0 :(得分:0)

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

该问题已在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未将所有请求路由到应用程序的事实。然而,&#34; en&#34;从控制器操作接收的URL中删除STILL作为catch all参数。这只是在&#34; en /&#34;是url路径的第一部分。

e.g。

/something/en/index.html解析为&#34; something / en / index.html&#34;。 /en/index.html解析为&#34; index.html&#34;。