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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top