2013-01-07 21 views
5

mam stworzył świat powitania z ASP.NET MVC projektów Web API używając VS2012:Wracając 400 zamiast 404 z 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"; 
    } 
} 

wystawiające żądanie dostać się do tego sterownika zwraca niektóre XML z dane o statusie 200. Jak dotąd wszystko dobrze.

Kiedy usunąć tę metodę, na przykład:

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

I wtedy dostać 404 nie znaleziono. To, czego chcę, to 400 złych wniosków, ponieważ trzeba podać identyfikator. Jak mogę to osiągnąć?

+2

To czego chcesz, jest złe. 404 jest tutaj prawidłowym kodem statusu. – SLaks

+0

@SLaks: uzgodniono, ale 400 jest wymaganiem biznesowym. Postrzegają go jako przekazujący pusty identyfikator, taki sam jak w przypadku ciągu alfanum, a nie ciągu int. – sennett

Odpowiedz

8

Nie trzeba zachować metodę Get() prostu wyrzucić błąd. Zmień sygnaturę metody Get by ID na:

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

Dzięki za to. To jest odpowiedź, którą podjąłem ze względu na zautomatyzowane wiązki testowe i dokumentacyjne, które wywołują błędy "dwuznacznej metody". – sennett

4

Jednym ze sposobów jest to metoda, ale wyjątek Zamiast:

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"; 
    } 
} 
Powiązane problemy