我正在使用 ASP.NET 5/MVC 6,并且我正在托管一个AngularJS SPA。
我正在使用 UI 路由器,它工作正常,但是当我刷新路由上的页面时,例如/customer/5
我得到一个空白页面。 我希望这是因为我没有与该路线关联的路由/控制器。
理想情况下,我希望MVC提供包含我所有AngularJS代码的"index.html"(我的默认页面),然后让UI路由器显示正确的页面。
我该怎么做? 这是我目前Configure
函数的子集Startup.cs
app.UseMvc();
app.UseDefaultFiles();
app.UseStaticFiles();
管道中的 MVC 之前添加一个自定义中间件,以处理所有非 ajax 和非静态文件请求。
app.UseStaticFiles();
app.Use(async (context, next) =>
{
if (!Path.HasExtension(context.Request.Path.Value) && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
{
await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html"));
}
await next();
});
app.UseMvc();
分别使用核心 1.1 Web api 和 SPA(从 CLI 创建的 React-Redux)Asp.net 我遇到了同样的问题。我将 SPA 作为静态文件托管在 wwwroot 文件夹中
下面的代码对我有用。
app.UseDefaultFiles();
app.UseStaticFiles();
app.Use(async (context, next) =>
{
if (!context.Request.Path.Value.Contains("/api"))
{
context.Response.Redirect("/");
//context.Response.Redirect($"/#{context.Request.Path.Value}");
return;
}
await next();
});
app.UseMvc();