我的前端有一个带有 Vue.js 的 ASP.NET Core 2.2 应用程序。在我的创业公司中,我有以下路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "mvc",
template: "{controller=Home}/{action=Index}/{id?}");
// TODO: When api route doesn't exists it goes into the spa-fallkback route. We need to prevent this.
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
问题出在我的 API 路由上。当 API URL 存在时,我们没有问题,但是当 URL 不存在时,它会转到spa-fallback
路由。
有没有办法设置路由,以便当 URL 以/api/
开头并且找不到路由时,它会返回 404 而不是 spa 回退?
您始终可以手动创建捕获全部操作:
public class HomeController : Controller
{
// SPA Fallback
public IActionResult Index()
{
return View();
}
// Disable all other /api/* routes.
[Route("/api/{**rest}")]
public IActionResult Api()
{
return NotFound("");
}
}
恐怕不是因为您正在为SPA定义回退路由,因此.Net核心试图做的是查找该路由,如果不存在,它将转到spa-回退
以下是使用行中的 API 请求进行拦截的方法
if (context.Request.Path.Value.StartsWith("/api"))
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.Use(async (context, next) =>
{
if (context.Request.Path.Value.StartsWith("/api"))
{
await context.Response.WriteAsync("Hello");
}
});
app.UseMvc();
}
我们通过将项目拆分为.UI
和.API
项目来解决此问题。每个都有自己的 IoC 容器、路由...
单独的项目还具有将它们发布到单独的应用程序池或不同服务器上的优势。