Générer une URL vers un service dans ServiceStack
-
10-12-2019 - |
Question
Comment puis-je générer une URL vers un service spécifique défini dans ServiceStack ?
Je souhaite inclure des URL complètes ou relatives vers d'autres points de terminaison dans le cadre de la réponse DTO. RestServiceBase
contient RequestContext.AbsoluteUri
, mais cela dépend entièrement de la demande.
La solution
Routage inversé
Le Routage inversé La section du wiki montre comment utiliser les méthodes d'extension sur un fichier Demander un DTO pour générer des URI relatifs et absolus :
Si tu utilises [Route]
attributs de métadonnées (par opposition à l'API Fluent), vous pourrez générer des URI à typage fort en utilisant uniquement les DTO, vous permettant de créer des URL en dehors du framework Web ServiceStack comme cela est fait avec les clients de service .NET à l'aide de l'API Fluent. ToUrl(HttpMethod)
et ToAbsoluteUri(HttpMethod)
, par exemple:
[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
Le Contacts par courrier électronique La démo montre un exemple d'utilisation des méthodes d'extension de routage inversé ci-dessus pour remplir les itinéraires pour les formulaires HTML et les liens dans les vues Razor.
Autres méthodes d'extension de routage inversé
new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
Accéder à la requête HTTP
Vous pouvez également inspecter la httpRequest sous-jacente entrante avec :
var httpReq = base.RequestContext.Get<IHttpRequest>();
Ainsi que l'objet Request ASP.NET (ou HttpListener) sous-jacent avec :
var aspNetReq = httpReq.OriginalRequest;
Ils devraient contenir des propriétés supplémentaires qui devraient être plus utiles.