私はこれを行う方法は、現在、私はその後、私はURLを生成し、リンクを持つレスポンスヘッダを設定するために、応答フィルタを使用するインターフェイス
を実装するDTO応答を返すためです。
this.ResponseFilters.Add((req, res, dto) =>
{
if (!(dto is IHaveLinks))
return;
var links = (dto as IHaveLinks).Links
if(links == null || !links.Any())
return;
var linksText = links
.Select(x => string.Format("<{0}>; rel={1}"), x.Request.ToUrl(x.Method), x.Name));
var linkHeader = string.Join(", ", linksText);
res.AddHeader("Link", linkHeader);
});
これは最もクリーンな方法です。上記のLink
オブジェクトは、「このメソッドでこのリクエストを行うと、指定されたリソースを取り戻す」と効果的に言います。 BLLまで出血する唯一のHTTPのものはMethod
です。しかし、あなたはそれを取り除き、GETのURLだけを返すことができます。または、一般化された「操作」にマップしますか?例として
:
public class ExampleService : Service
{
public ExamplesResponse Get(ExamplesRequest request)
{
var page = request.Page;
var data = // get data;
return new ExamplesResponse
{
Examples = data,
Links = new []
{
new Link { Name = "next", Request = request.AddPage(1), Method = "GET" },
new Link { Name = "previous", Request = request.AddPage(-1), Method = "GET" },
}
}
}
}
[Route("/examples/{Page}")]
public class ExamplesRequest : IReturn<ExamplesResponse>
{
public int Page { get; set; }
// ...
}
(AddPage
方法は、要求のクローンを返し、適切にページ・プロパティを設定する。)役立ち
ホープ。
ありがとうございます、それはServicestackフレームワークと一貫した良い解決策です。 BLLに関連して、私は問題がフレームワーク自体にあると思う。ルートへのよりオープンなアクセスがあったとしても、そのマップを使用して逆方向ルーティングを行う方が簡単で、インフラストラクチャコード(IReturn + Route属性)をすべて避けることができます – jruizaranguren
「ToUrl」メソッドは、残念なことに、IReturnを実装し、Route属性を持つ要求dtoが必要です。 – tgmdbm