gpt4 book ai didi

asp.net-core-mvc - ASP.net core + Angular Fallback路由排除以/api开头的子路径

转载 作者:行者123 更新时间:2023-12-05 07:39:03 24 4
gpt4 key购买 nike

当使用 ASP.net 核心 Angular 2 模板时,路由设置为在找不到路由时回退到 Angular 应用程序

            routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new {controller = "Home", action = "Index"}
);

这很好,除了它还会捕获无效的 api 路由。如何添加约束,使其不会回退到以 /api

开头的路由

最佳答案

根据我的研究,可以通过两种方法来完成:

方法一(使用中间件):

阅读Rick Stahl's blog article

我通常不喜欢这种中间件处理方式,因为它会使您的路由更加复杂。

方法二(使用常规路由):

像这样将 apiFallback 路由放到 Startup.cs

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers(); // here you have your api controllers with whatever routing you use (conventional or using attributes)

endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

// this is your API fallback route for handling every previously unhandled route starting with api/ and send everything past api as an endpointName parameter
// remember to put this route to nearly bottom of UseEndpoints method as it's very greedy
endpoints.MapControllerRoute(
name: "apiFallback",
pattern: "api/{*endpointName}",
defaults: new { controller = "Home", action = "ApiNotFoundFallback" });

endpoints.MapFallbackToFile("index.html"); // here is your SPA page
});

现在让我们在您的 Home Controller 中创建 ApiNotFoundFallback Controller 操作(或您想要的任何其他地方 - 然后不要忘记相应地更改 apiFallback 路由中的默认值)

public IActionResult ApiNotFoundFallback(string endpointName)
{
return NotFound($"No endpoint matching \"{endpointName}\" not found!");
}

瞧!所有不以/api 开头且未由您的 Controller 处理的路由都落入 index.html,并且所有“未找到”的 API 均由 ApiNotFoundFallback 操作处理。

关于asp.net-core-mvc - ASP.net core + Angular Fallback路由排除以/api开头的子路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com