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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top