2012-03-20 15 views
5

ho ApiController con l'azione Get in questo modo:ASP.NET Web API: Opzionale Guid parametri

public IEnumerable<Note> Get(Guid userId, Guid tagId) 
{ 
    var userNotes = _repository.Get(x => x.UserId == userId); 
    var tagedNotes = _repository.Get(x => x.TagId == tagId);  

    return userNotes.Union(tagedNotes).Distinct(); 
} 

voglio che le seguenti richieste è stato diretto a questa azione:

  • http: // {} somedomain/api/note userid = {GUID} & TagID = {GUID}
  • http: // {} somedomain/api/note userid = {GUID}
  • http: // {} somedomain/api/notes? tagId = {Guid}

Quale modo dovrei fare?

UPDATE: Fare attenzione, il controller api non deve avere un altro metodo GET senza parametri oppure è necessario utilizzare l'azione con un parametro opzionale.

risposta

9

È necessario utilizzare il tipo Nullable (IIRC, potrebbe funzionare con un valore di default (Guid.Empty)

public IEnumerable<Note> Get(Guid? userId = null, Guid? tagId = null) 
{ 
    var userNotes = userId.HasValue ? _repository.Get(x => x.UserId == userId.Value) : new List<Note>(); 
    var tagNotes = tagId.HasValue ? _repository.Get(x => x.TagId == tagId.Value) : new List<Note>(); 
    return userNotes.Union(tagNotes).Distinct(); 
} 
+0

Grazie, è lavori – ebashmakov