【问题标题】:Returning 400 rather than 404 from ASP.NET MVC Web API从 ASP.NET MVC Web API 返回 400 而不是 404
【发布时间】:2013-01-07 01:47:08
【问题描述】:

我已经使用 VS2012 创建了 ASP.NET MVC Web API 项目的 hello world:

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}

向该控制器发出 get 请求会返回一些 XML 数据,状态为 200。到目前为止一切正常。

当我删除该方法时,如下所示:

public class ValuesController : ApiController
{
    // GET api/values
    //public IEnumerable<string> Get()
    //{
    //    return new string[] { "value1", "value2" };
    //}

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}

然后我得到一个 404 未找到。我想要的是 400 错误请求,因为必须提供 ID。我怎样才能做到这一点?

【问题讨论】:

  • 你想要的是错误的。 404 是正确的状态码。
  • @SLaks:同意,但 400 是业务要求。他们认为它传递了一个空白 ID,就像传递一个 alphanum 字符串而不是 int 字符串一样。

标签: asp.net-mvc-4 asp.net-web-api


【解决方案1】:

您不必为了抛出错误而保留Get() 方法。 将 Get by ID 方法的签名更改为:

public string Get(int? id = null)
{
    if (id == null) throw new HttpResponseException(HttpStatusCode.BadRequest);
    return "value";
}

【讨论】:

  • 谢谢。这是我选择的答案,因为我们抛出了“模棱两可的方法”错误。
【解决方案2】:

一种方法是包含该方法,但改为抛出异常:

public class ValuesController : ApiController
{
    // GET api/values
    public void Get()
    {
        throw new HttpResponseException(HttpStatusCode.BadRequest);
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2013-08-18
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2014-05-07
    相关资源
    最近更新 更多