ServiceStackで定義された特定のサービスへのURLを生成するにはどうすればよいですか?
応答DTOの一部として、他のエンドポイントへの完全なURLまたは相対URLを含めたい。RestServiceBase
が含まれていますRequestContext.AbsoluteUri
が、それは完全にリクエストに依存しています。
ServiceStackで定義された特定のサービスへのURLを生成するにはどうすればよいですか?
応答DTOの一部として、他のエンドポイントへの完全なURLまたは相対URLを含めたい。RestServiceBase
が含まれていますRequestContext.AbsoluteUri
が、それは完全にリクエストに依存しています。
Wikiの「リバースルーティング」セクションでは、人気のあるリクエストDTOで拡張メソッドを使用して、相対URIと絶対URIを生成する方法を示しています。
(Fluent APIではなく)メタデータ属性を使用すると、DTOのみを使用して強い型のURIを生成できるようになり、と[Route]
を使用して.NETサービスクライアントで行うように、ServiceStackWebフレームワークの外部でURLを作成できます。ToUrl(HttpMethod)
ToAbsoluteUri(HttpMethod)
[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
電子メールの連絡先のデモは、上記の逆ルーティング拡張メソッドを使用して、RazorビューにHTMLフォームとリンクのルートを入力する例を示しています。
new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
次の方法で、着信する基になるhttpRequestを検査することもできます。
var httpReq = base.RequestContext.Get<IHttpRequest>();
基になるASP.NET(またはHttpListener)要求オブジェクトと同様に:
var aspNetReq = httpReq.OriginalRequest;
それらには、より便利な追加のプロパティが含まれている必要があります。