ASP.NET 核心通配符路由除外

ASP.NET Core wildcard route except

我正在使用 ASP.NET Core 来提供这样的 SPA:

[<Route("{*url}")>]
member this.Index () =      
    this.View("~/wwwroot/Index.cshtml")

我的 JSON 端点在同一个应用程序上,路由如下:

[<Route("api/something/{somethingId:int})>]

这工作正常,除了当我尝试调用端点时 api/something/that/doesnt/exist 当我真正想要 404 时我得到了索引页面。

是否可以设置 [<Route("{*url}")>] 以排除任何以 "api" 开头的 url?

你应该使用 Route Constraints。有一个正则表达式选项,您可以使用它来过滤掉 API 调用(您不想要的)。

然后你需要做一个否定的前瞻来否定一个字符串。

[<Route("{*url:regex(^(?!api).*$)}")>]