c# - 使用 ServiceStack 返回具有特定状态代码的自定义 DTO 的选项有哪些?

标签 c# asp.net-web-api servicestack

我们正在使用 ServiceStack 构建 Web API。我遇到一种情况,我希望能够从 API 端点返回 400 (BadRequest) 响应,并带有一些指示错误具体原因的附加数据。

我知道返回特定状态代码的两种方法是:

  1. 引发异常。
  2. 返回 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/

相关文章:

c# - 与 System.Web.Mvc 的版本冲突

c# - EPPlus - 保存在内存中创建的 excel 并在 excel 上打开它会出错

servicestack - 启用gzip/deflate压缩

api - 通过 angularJs 和 $http.get 将凭据传递给服务堆栈 rest api

c# - 如何使用自定义属性属性对类的属性进行排序

c# - 当线程区域性不是英语时,.NET CookieException "Cookie format error"- 仅在某些环境中

c# - 为什么内置异常消息往往没有具体细节? (例如字典中的键)

c# - 记录和累积来自不同服务器的异常的最佳方法是什么?

json.net - 如何根据用户授权动态jsonignore?

.net - 从 DTSX 包中使用 REST API 的最佳方式是什么?