【问题标题】:Error handling in ServiceStack new APIServiceStack 新 API 中的错误处理
【发布时间】:2013-03-20 03:55:54
【问题描述】:

我有简单的服务堆栈 Web 服务,它以名称作为输入参数。从this thread,我了解到使用新 API 时不再需要 ResponseStatus 属性。但是,当我尝试使用 fiddler 编写没有名称的请求时,它按预期返回 400 响应代码,但不包含有关异常的任何信息。那么,新 API 是否提供了开箱即用的错误描述,尤其是对于非 .NET 客户端。如果没有,是否有可能提供此信息。

public object Any(CustomerRequest request)
{
   if (request.Name == null)
   {
     throw new ArgumentException("Name is required");
   }

   var objCustomer = //get customer from DB

   return objCustomer;
}

public class CustomerRequest
{
   public string Name {get;set;}
   public bool IsActive {get;set;}
}

【问题讨论】:

  • 你的服务类继承自什么?
  • 类 CustomerService : 服务
  • 我根据问题中的信息写了一个快速测试项目。我在正文中收到 400 http 代码和错误响应。 500 错误是针对内部服务器错误,所以我认为您的测试项目中可能存在错误。
  • 使用提琴手作曲家或 Firefox 我得到 JSON 对象:{"ResponseStatus":{"ErrorCode":"ArgumentException","Message":"Name is required","Errors":[]}}。为简洁起见,我禁用了堆栈跟踪。
  • 这里还有测试代码的链接pastebin.com/vqZSRs2n

标签: exception-handling error-handling servicestack


【解决方案1】:

您不需要使用新 API 添加 ResponseStaus。根据 penfold 的示例,您应该得到 {"ResponseStatus":{"ErrorCode":"ArgumentException","Message":"Name is required","Errors":[]}} 作为响应。

您的代码库中是否还有 CustomerResponse 类?如果是这样,请尝试将其注释掉或删除它。即使您在发生异常时返回 object,ServiceStack 仍会查找传统命名的 Response 类型(请参阅 here)并尝试填充 ResponseStatus 属性。

【讨论】:

  • 感谢您的收获。现在,我在上面的 cmets 中留下了命名约定问题,任何人都可以建议。
  • 您能否更具体地了解“命名约定问题”?如果您为您的服务返回“对象”,则 CustomerResponse 类(和其他“响应”类)是死代码,因此请将其删除。您需要我缺少的 CustomReponse 吗?如果是这样,可能会发布另一个问题。
  • 是的,我只是发送客户作为回复,以便解决问题。但是如果我要发送自定义响应,那么它也应该是一样的权利,我的意思是将客户填充到自定义对象中并返回它。由于返回类型是对象。
  • 我希望wiki 包含这个!
猜你喜欢
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多