我们正在使用 ServiceStack 构建 Web API。我遇到一种情况,我希望能够从 API 端点返回 400 (BadRequest) 响应,并带有一些指示错误具体原因的附加数据。
我知道返回特定状态代码的两种方法是:
- 引发异常。
- 返回
HttpResult
的实例.
我不想返回 HttpResult
的实例。这需要我使方法返回类型更加通用(当前返回类型是特定响应 DTO),并且还有其他原因(与我们使用 ServiceStack 有关)导致出现问题。
抛出异常的情况很奇怪。根据响应的形式,即使在异常情况下,ServiceStack 也会使用自定义 DTO(并且文档证实了这一点)。还有HttpError
异常类有一个 Response
对应于用于发出响应的 DTO 的属性,但是设置 Response
自定义 DTO 实例的属性没有达到预期效果。它只影响 ResponseStatus
的值响应 DTO 上的属性。 DTO 上的其他属性未初始化,就像 ServiceStack 生成了响应 DTO 的新实例并使用它一样(但从提供的 DTO 中设置其 ResponseStatus
属性。
我所说的一切真的都是正确的吗?是否有另一种选项可以形成没有我上面提到的缺点的响应?
最佳答案
如果您想用附加元数据装饰响应,请在 HttpResult
中返回响应 - 这就是该类的全部用途。直接返回的响应 DTO 的 HTTP 响应正文与包装在 HttpResult
中的 HTTP 响应正文没有明显区别。
或者,您也可以直接修改 base.Response
,请参阅 Customizing HTTP Responses 上的文档。 .
抛出异常只是返回 HTTP 错误响应。 ServiceStack 具有隐式结构化错误处理,它捕获从任何响应 DTO 中提取的 ResponseStatus 中的错误。
关于c# - 使用 ServiceStack 返回具有特定状态代码的自定义 DTO 的选项有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43231413/