从ASP.NET MVC Web API返回400而不是404

时间:2013-01-07 01:47:08

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

我使用VS2012创建了ASP.NET MVC Web API项目的hello世界:

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请求会返回一些状态为200的数据XML。到目前为止一切都很好。

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

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。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

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

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";
    }
}