Asp.net mvc 4 从ASP.NET MVC Web API返回400而不是404

Asp.net mvc 4 从ASP.NET MVC Web API返回400而不是404,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我使用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

我使用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";
    }
}
公共类值控制器:ApiController
{
//获取api/值
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
//获取api/values/5
公共字符串Get(int-id)
{
返回“值”;
}
}
向该控制器发出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";
    }
}
公共类值控制器:ApiController
{
//获取api/值
//公共IEnumerable Get()
//{
//返回新字符串[]{“value1”,“value2”};
//}
//获取api/values/5
公共字符串Get(int-id)
{
返回“值”;
}
}

然后我得到一个404找不到。我想要的是一个400错误的请求,因为必须提供一个ID。如何实现这一点?

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

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

您不需要仅为了抛出错误而保留
Get()
方法。 将“按ID获取”方法的签名更改为:

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

你想要的是错误的。404是这里的正确状态代码。@SLaks:同意,但400是业务要求。他们认为这是传递一个空白ID,就像传递一个alphanum字符串而不是int字符串一样。谢谢。这是我的答案,因为一个自动化的测试和文档工具,我们抛出了“不明确的方法”错误。