我使用Angular和Asp.net 5创建了SPA。假设为Angular路由路径的所有路由都将返回index.html,然后Anguar将进一步处理路由。
当我输入浏览器网址:http://localhost:12599/user并按回车键。页面已创建,所有静态内容都是正确请求的。 http://localhost:12599/js/app.js并且一切正常。
直到......我希望拥有更复杂的路线,例如:http://localhost:12599/user/registration。我的index.html已正确加载,但所有静态内容都被错误地调用,例如:http://localhost:12599/user/js/app.js。这显然无法工作( 404 ),因为其他细分 /用户可能会删除 / registration 。
IF path.Contains("/js") THEN path = path.stripOutEverythingBefore("/js")
因此,这会将http://localhost:12599/user/js/app.js转换为http://localhost:12599/js/app.js
我的设置的一些代码所以这对你们来说不会那么干:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) //, IRouteBuilder routes
{
loggerFactory.AddConsole();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Use(async (context, next) =>
{
await next();
if (context.Request.Path.ToString().Contains("index.html") ||
SinglePageAppRequestCheck(context))
{
// add config cookie
var webConfig = new WebConfigModel();
Configuration.Bind(webConfig);
var jsonSettings = new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
context.Response.Cookies.Append("ldmeConfig", JsonConvert.SerializeObject(webConfig, Formatting.None, jsonSettings));
}
// If there's no available file and the request doesn't contain an extension, we're probably trying to access a page.
// Rewrite request to use app root
if (SinglePageAppRequestCheck(context))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseStaticFiles();
}
private static bool SinglePageAppRequestCheck(HttpContext context)
{
return context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value);
}
设置取自http://benjii.me/2016/01/angular2-routing-with-asp-net-core-1/
答案 0 :(得分:0)
只需在索引中添加基本链接,所有相关请求都将正确完成
<base href="/">
我知道,它会那么简单......虽然我花了3天的时间来解决这个问题:)