我有一个项目想要用作 Web API 和 Blazor wasm UI。该 API 也可以从其他项目访问,因此我希望该 API 向消费者提供有用的错误详细信息。
我现在通过使用该网站来实现这两个目的MapFallbackToFile()
方法,但是如果你尝试做一个POST
到只接受的端点GET
,你得到一个404
作为回应,而不是405
对于无效的 http 方法。
我正在使用中提供的解决方案这个问题 https://stackoverflow.com/questions/61268117/how-to-map-fallback-in-asp-net-core-web-api-so-that-blazor-wasm-app-only-interc为了仅映射非 api 路径,但这总是给出 404,我担心它会隐藏请求的任何其他潜在问题。
我怎样才能得到HandleApiFallback()
方法简单地表现为 Web API 通常的行为,同时仍然排除/api/
服务 Blazor 页面的路径?
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.Map("api/{**slug}", HandleApiFallback);
endpoints.MapFallbackToFile("{**slug}", "index.html");
});
private Task HandleApiFallback(HttpContext context)
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task.CompletedTask;
}
集成测试示例:
var response = client.GetAsync(path).GetAwaiter().GetResult();
response.StatusCode.Should().Be(HttpStatusCode.OK);
var response2 = client.PostAsJsonAsync(path, "").GetAwaiter().GetResult();
response2.StatusCode.Should().Be(HttpStatusCode.MethodNotAllowed);
当你有任何MapFallbackToFile()
使用后,第二个断言失败为 404,而不是 405。