5

ServiceStackで定義された特定のサービスへのURLを生成するにはどうすればよいですか?

応答DTOの一部として、他のエンドポイントへの完全なURLまたは相対URLを含めたい。RestServiceBaseが含まれていますRequestContext.AbsoluteUriが、それは完全にリクエストに依存しています。

4

1 に答える 1

5

逆ルーティング

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();

Httpリクエストへのアクセス

次の方法で、着信する基になるhttpRequestを検査することもできます。

var httpReq = base.RequestContext.Get<IHttpRequest>();

基になるASP.NET(またはHttpListener)要求オブジェクトと同様に:

var aspNetReq = httpReq.OriginalRequest;

それらには、より便利な追加のプロパティが含まれている必要があります。

于 2012-03-10T08:50:43.030 に答える