如何始终为每个请求默认路由



我正在使用 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();

最新更新