我在 .net8 Blazor Web 应用程序 API 中使用快速端点。 我放
DontCatchExceptions();
在一些配置方法中,如下所示:
Post("policies/contacts");
Options(x => x.WithTags("Policy"));
DontCatchExceptions();
并且 HandleAsync 方法抛出错误:'
public override async Task HandleAsync(CancellationToken ct)
{
try
{
var list = await Data.GetCountryCodeList();
await SendAsync(list);
}
catch (Exception e)
{
ThrowError(e.Message, 400);
}
}
到目前为止,我只在 GET 方法中使用它,而且效果很好。 现在我在 POST 方法中使用它,但它不起作用。它只是被忽略了——没有错误或任何东西。 我不知道是否是因为它是 POST 方法,这只是我看到的唯一明显的区别。我在 ThrowError 行上放置了一个断点,它就在那里。
我相信你误解了
ThrowError()
方法的目的。
ThrowError() - 此方法将立即中止执行并向客户端发送错误响应。
尽管这个方法以
Throw...
开头,但它实际上并不会抛出传统意义上的异常。其目的是短路处理程序的执行并发送错误响应。
这样就可以正常工作了。它不起作用,因为您要使用
DontCatchExceptions()
关闭内置错误响应功能,如果您有自己的 异常捕获中间件 设置,您就会这样做。