2 回答
TA贡献1829条经验 获得超9个赞
生成响应的代码ProblemDetails
不知道状态代码,因此在构建响应对象时410
没有关联的Link
和属性。Title
要添加此感知,请ApiBehaviorOptions
在 中进行配置ConfigureServices
,如下所示:
services.Configure<ApiBehaviorOptions>(options =>
{
options.ClientErrorMapping[410] = new ClientErrorData
{
Title = "Gone",
Link = "https://tools.ietf.org/html/rfc7231#section-6.5.9"
};
});
ClientErrorMapping
int
是(状态代码) 到的字典ClientErrorData
。请注意,我在上面使用的值Link
确实指向 RFC 的正确部分。
TA贡献1946条经验 获得超3个赞
简单地说,您必须实际返回ProblemDetails
响应正文。我必须仔细研究代码才能确定,但我认为 ASP.NET Core 通过中间件执行此操作只是为了获得特定的结果。他们说4xx 范围内的任何内容,但我认为这实际上仅限于返回该范围内的状态代码的内置结果类型,而不是任何具有 4xx 状态代码的结果。再说一遍,这是猜测,因为我还没有确切地了解他们在做什么,尽管它没有作为实际结果类的一部分发生。
出于您的目的,您可以采用几种不同的方法来处理此问题。您可以编写自己的中间件来捕获出站响应并重写它们。您可以使用自定义异常处理程序。您可以简单地继承ObjectResult
,然后ProblemDetails
自己创建一个实例并将其放入基础中。您甚至可以ProblemDetails
直接从操作中返回(尽管这显然是最不理想的方式)。
- 2 回答
- 0 关注
- 155 浏览
添加回答
举报