2013-01-07 24 views
5

tôi đã tạo ra hello world các dự án ASP.NET MVC web API sử dụng VS2012:Trở 400 chứ không phải 404 từ 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"; 
    } 
} 

Ban hành một yêu cầu get để điều khiển trả về một số XML của dữ liệu có trạng thái 200. Tất cả đều tốt cho đến nay.

Khi tôi loại bỏ phương pháp đó, như thế này:

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

Sau đó tôi nhận được một 404 không tìm thấy. Những gì tôi muốn là một yêu cầu xấu 400, bởi vì một ID phải được cung cấp. Làm thế nào tôi có thể đạt được điều này?

+2

Điều bạn muốn là sai. 404 là mã trạng thái chính xác tại đây. – SLaks

+0

@SLaks: Đồng ý, nhưng 400 là yêu cầu kinh doanh. Họ nhìn thấy nó như đi qua một ID trống, giống như đi qua một chuỗi chữ cái chứ không phải là chuỗi int. – sennett

Trả lời

8

Bạn không cần phải giữ cho phương pháp Get() chỉ để ném ra một lỗi. Thay đổi chữ ký của phương thức Nhận bằng ID của bạn thành:

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

Cảm ơn vì điều này. Đây là câu trả lời tôi đã đi với vì một thử nghiệm tự động và tài liệu khai thác mà chúng tôi đã ném lên "phương pháp mơ hồ" lỗi. – sennett

4

Một cách là bao gồm phương pháp, nhưng ném một ngoại lệ thay vì:

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