2013-01-07 75 views
5

我已經創建ASP.NET MVC的Web API項目的世界您好:使用VS2012回到400,而不是404從ASP.NET MVC的Web API

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。我怎樣才能做到這一點?

+2

你想要的是錯誤的。 404是這裏的正確的狀態碼。 – SLaks

+0

@SLaks:同意,但400是業務需求。他們將其視爲傳遞空白ID,與傳遞字符串而不是int字符串相同。 – sennett

回答

8

你並不需要保持Get()方法只是拋出一個錯誤。 將您的獲取ID方法的簽名更改爲:

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

謝謝你。這是我一直在使用的答案,因爲我們已經拋出了「模糊方法」錯誤的自動化測試和文檔處理。 – sennett

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