ASP.NET 5 和 Angular 路由在 dnx rc1 上不起作用

ASP.NET 5 and Angular Routing not working on dnx rc1

您好,我有一个内置于 ASP.NET 5 的项目(dnxcore50 和 dnx451)。它正在为我的 AngularJS 脚本的请求提供服务。当我构建项目时,我正在使用 Microsoft beta 5 依赖项并使用重写规则将所有请求发送到 index.html,因此我的 angular 路由可以正常工作。但是今天我不得不升级到 rc1 依赖项,现在我的重写不起作用,我只是在我的路线上得到一个 404。这个新库将这行奇怪的代码添加到我的 web.config

  <handlers>
  <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="false" startupTimeLimit="3600" />

有没有办法设置我的路由,以便它与 angular 一起工作,例如,如果我去 localhost/shop,它会将它重定向到 index.html 和我的 angular路由将接管。

我的设置类似,我在 配置Startup.cs

    app.UseDefaultFiles();

    app.UseStaticFiles();

    app.UseIISPlatformHandler();

system.webServerweb.config 中的重写规则,需要能够同时拥有两者网络 api 和 index.html angular 应用服务:

    <rewrite>
      <rules>
        <!--Redirect selected traffic to index -->
        <rule name="Index Rule" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_URI}" matchType="Pattern" pattern="^/api/" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>

您可能也需要与您自己的规则类似的东西

我认为有比在路由设置中使用 url 重写更好的方法(因此根本不需要 url 重写)。例如。我这样做了:

    app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "api",
                template: "api/{controller}/{action}");

            routes.MapRoute(
                name: "angular",
                template: "{*url}",
                defaults: new {controller = "Home", action = "Index"},
                constraints: new {url = new DoesNotContainConstraint(".", "api/") });                
        });

这确保所有 /api 都进入控制器,而其他所有内容进入索引。我必须自己做 DoesNotContainConstraint 以确保文件和 api 错误 url 得到正确处理,但这很容易。

如果您想将 ASP.NET 5/ASP.NET Core 与 IIS 一起使用,您需要安装 HttpPlatformHandler。 Here 是一个很好的分步说明,展示了如何安装 Http 平台处理程序、配置 IIS 以及将 APS.NET 核心应用程序发布到 IIS。