Servizi ServiceStack separati o combinati?
-
29-10-2019 - |
Domanda
Voglio avere endpoint ServiceStack come i seguenti ...
[RestService("/items/recent")]
[RestService("/items/recent/{Page}")]
[RestService("/items/popular")]
[RestService("/items/popular/{Page}")]
Dal momento che entrambi sarebbero tornati a List<Item>
, Mi piacerebbe poter avere entrambi nello stesso RestServiceBase
Per una gestione del codice più semplice. È possibile? In tal caso, come posso differenziare la richiesta quando arriva per scoprire se si trattava di una richiesta "recente" o "popolare" in modo da poterla gestire in modo appropriato?
Soluzione
Sì, puoi avere più percorsi di riposo che puntano allo stesso servizio Web.
Se si desidera lasciare i percorsi così come puoi ispezionare il percorso di richiesta utilizzato per invocare il servizio tramite HttPrequest, cioè:
var httpReq = base.RequestContext.Get<IHttpRequest>();
httpReq.PathInfo //or httpReq.RawUrl, httpReq.AbsoluteUri, etc.
Il modo in cui elabori che tipo di richiesta è, guardando la richiesta popolata dto - ma per distinguere tra /recente/ e /popolare/ Dovresti archiviarlo in un'altra proprietà DTO e quindi ispezionare i suoi valori, cioè
[RestService("/items/{Type}")]
[RestService("/items/{Type}/{Page}")]
public class Items
{
public string Type { get; set; }
public int? Page { get; set; }
}
public class ItemsService : ServiceBase<Items>
{
public override object Run(Items request)
{
if (request.Type == "recent")
if (!request.Page.HasValue)
//path 1
else
//path 2
else if (request.Type == "popular")
if (!request.Page.HasValue)
//path 3
else
//path 4
}
}
Questo è anche simile a questa domanda di stackoverflow:Hai bisogno di aiuto per l'implementazione di ServiceStack