Generazione di un URL a un servizio in ServiceStack
-
10-12-2019 - |
Domanda
Come genererei un URL a un servizio specifico definito in ServiceStack?
Voglio includere URL completi o relativi ad altri endpoint come parte della risposta DTO.RestServiceBase
contiene RequestContext.AbsoluteUri
, ma è interamente dipendente dalla richiesta.
Soluzione
Invert Routing
the Reverse routing sezione nel wiki mostra come usare l'estensione Metodi su una richiesta Popalated DTO DTO per generare uri relativi e assoluti:
Se si utilizzano attributi di metadati [Route]
(al contrario dell'API fluente) sarai in grado di generare URI a digitato forte utilizzando solo il DTO, consentendo di creare URL al di fuori del ServiceDack Web Framework come con i clienti .NET. ToUrl(HttpMethod)
e ToAbsoluteUri(HttpMethod)
, ad esempio:
.
[Route("/reqstars/search", "GET")]
[Route("/reqstars/aged/{Age}")]
public class SearchReqstars : IReturn<ReqstarsResponse>
{
public int? Age { get; set; }
}
var relativeUrl = new SearchReqstars { Age = 20 }.ToGetUrl();
var absoluteUrl = new SearchReqstars { Age = 20 }.ToAbsoluteUri();
relativeUrl.Print(); //= /reqstars/aged/20
absoluteUrl.Print(); //= http://www.myhost.com/reqstars/aged/20
I contatti E-mail Demo mostra un esempio di utilizzo dei metodi di estensione di routing inverso sopra da Popolare percorsi per moduli HTML e collegamenti nelle viste del rasoio .
Altri metodi di estensione di routing inverso
new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
.
Accesso alla richiesta HTTP
È inoltre possibile ispezionare il httprequest di sottostanti in entrata con:
var httpReq = base.RequestContext.Get<IHttpRequest>();
.
Nonché l'oggetto di richiesta ASP.NET (o HTTPListener) sottostante con:
var aspNetReq = httpReq.OriginalRequest;
.
Dovrebbero contenere ulteriori proprietà che dovrebbero essere più utili.
new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
var httpReq = base.RequestContext.Get<IHttpRequest>();
var aspNetReq = httpReq.OriginalRequest;