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.webServer 中 web.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。
您好,我有一个内置于 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.webServer 中 web.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。