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

sev*_*rin 3 asp.net routing asp.net-core-mvc asp.net-core asp.net-core-webapi

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

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

我的JSON端点位于同一个应用程序中,路由如下:

[<Route("api/something/{somethingId:int})>]
Run Code Online (Sandbox Code Playgroud)

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

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

Min*_*ata 8

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

然后你需要做一个否定的预测来否定一个字符串.

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