您好我有一个在ASP.NET 5中构建的项目(dnxcore50和dnx451)。它正在处理我的AngularJS脚本的请求。当我构建项目时,我正在使用Microsoft beta 5依赖项并使用重写规则将所有请求发送到index.html,因此我的角度路由可以正常工作。但今天我不得不升级到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" />
有没有办法如何设置我的路由以便它适用于角度,例如,如果我去localhost / shop它会将它重定向到index.html,我的角度路由将接管。
答案 0 :(得分:4)
我正在进行类似的设置,而且我在 Startup.cs 中的配置,
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseIISPlatformHandler();
以及 web.config 中 system.webServer 中的重写规则,需要能够同时提供web api和index.html angular app:
<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>
您可能需要与您自己的规则类似的东西
答案 1 :(得分:0)
我认为有一种比在路由设置中使用url rewrite更好的方法(因此根本不需要重写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都转到控制器,其他所有内容都转到索引。我必须自己做DoNotContainConstraint以确保正确处理错误网址的文件和api,但这很容易。
答案 2 :(得分:0)
如果要将IIS 5 / ASP.NET Core与IIS一起使用,则需要安装HttpPlatformHandler。 Here是一个很好的循序渐进指令,显示如何安装Http Platform Handler,配置IIS并将IIS发布到IIS。