Web API中的HttpStatusCode和ReasonPhase为防御性编程返回什么?

时间:2015-08-19 12:39:34

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

在编写公共函数时,我通常会遵循防御性编程的做法,就像这样。

    public long CreateSection(Section section)
    {
        if (section == null)
            throw new ArgumentNullException("section");

        var entityId = section.EntityId;
        if (entityId == 0)
            throw new ArgumentException("To add section, the entity must have already been saved with entityId", "section");

        Debug.Assert(section.Id == 0, "If someone give such section, I don't minid to save it.");

        ...
        return section.Id;
    }

我将把它包装到ASP.NET Web API 2.x函数中。在ArgumentExceptions上,我想我需要使用HttpStatusCode和ReasonPhase抛出HttpResponseException。

  1. 我应该使用什么HttpStatusCode?
  2. 我是否应该覆盖缺少参数名称的默认ReasonPhase值?
  3. 处理API控制器功能中抛出的异常并告诉客户端的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

根据个人意见,

  1. 我会使用400 Bad Request。应避免使用500,因为您应该处理异常,因此它不是完全崩溃。
  2. 是的,让消费者知道他们做错了什么总是好的,这样他们就可以纠正他们的下一个请求。如果你的服务刚刚爆发,他们怎么知道他们做错了什么?
  3. 不要丢掉它们。如果你这样做,请确保你处理它们以输出像好的旧ASP项目中Application_ErrorGlobal.asax那样的东西。毕竟,干净的500分解并不是非常漂亮:)