Asp.net mvc 4 从ASP.NET MVC Web API返回400而不是404
我使用VS2012创建了ASP.NET MVC web API项目的hello world: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
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字符串一样。谢谢。这是我的答案,因为一个自动化的测试和文档工具,我们抛出了“不明确的方法”错误。