2015-04-13 13 views
11

Mam C# Web API i staram się uzyskać automatycznie utworzoną dokumentację pomocy do pracy z IHttpActionResult. Rozebrałem poniższy przykład, aby łatwiej było go odczytać.C# API Web Help Documentation IHttpActionResult

Dla obiektu poniżej jest prosty przykład. BusinessObject to tylko opakowanie. Kolekcja to CollectionBase : ObservableCollection<T>, ILoadable where T : BusinessObject. Jest to starsza baza kodu, która jest generowana automatycznie, ale używa jej ponownie.

public class Value : BusinessObject 
    { 
     public int Id { get; set; } 
    } 
    public class Values : CollectionBase<Value> 
    { 
     public override Value LoadObject(System.Data.IDataRecord record) 
     { 
      return new Value(); 
     } 
    } 

Po stronie API rzeczy. Następujące prace.

public class Values : ApiController 
{ 
    public IEnumerable<Value> GetThis() 
    { 
     Values values = new Values(); 
     return values; 
    } 
} 

enter image description here

Problem pojawia się, gdy próbuję zrobić

public IHttpActionResult GetThis() 
    { 
     Values values = new Values(); 
     return Ok(values); 
    } 

To nie rozpoznaje, że powinien użyć innego typu powrotną. "Opis zasobu" kończy się wynikiem IHttpActionResult bez próbek wyjściowych. Teraz mogę dodać

config.SetActualResponseType(typeof(IEnumerable<Value>), "Values", "GetThis"); 

i pokaże wyjście próbki ale „Resource Description” nadal będzie IHttpActionResult. To jest główny problem, który mam. Chciałbym użyć IHttpActionResult, ponieważ jest bardzo łatwy w użyciu i może bardzo łatwo zwrócić kody błędów, jeśli są potrzebne. Chciałbym móc automatycznie konstruować dokumentację.

AKTUALIZACJA: Po dalszych badaniach ułożyłem dobrze ten post. Resource Description on Web API Help page is showing "None."

W zasadzie dodaje się atrybut typu odpowiedzi do metody.

[ResponseType(typeof(IEnumerable<Value>))] 
public IHttpActionResult GetThis() 
{ 
    Values values = new Values(); 
    return Ok(values); 
} 

Chociaż to technicznie działa i zmieniłem mój istniejący kod, aby go użyć. Byłoby fajnie, gdyby był jakiś sposób, żeby to jakoś automatycznie rozpoznać. Nie jestem pewien, czy to możliwe, czy nie.

+0

Powinieneś raczej odpowiedzieć na swoje pytanie, gdyby okazało się odpowiedź (i tak, to jest poprawna odpowiedź; P). – julealgon

+0

Ya, myślałem o tym. Miał nadzieję, że ktoś przyjdzie z konfiguracją "hej just change", aby sprawdzić, co OK (typ) zwraca "i zrobi to dla każdej metody bez konieczności dołączania atrybutu za każdym razem. Zostawię to bez odpowiedzi na trochę dłużej, żeby zobaczyć. –

Odpowiedz

21

To działa dla tego, co robię. Jest to trochę żmudne, ale trzeba w każdej chwili zwrócić kody błędów i zachować funkcjonalność dokumentacji pomocy.

[ResponseType(typeof(IEnumerable<Value>))] 
public IHttpActionResult GetThis() 
{ 
    Values values = new Values(); 
    return Ok(values); 
} 

Resource Description on Web API Help page is showing "None."