2

私はサービススタックのかみそり機能を試してみました。応答DTOの1つで機能するかみそりのcshtmlビューがあります。

RESTルートのいくつかのフィールドから入力されたレイザービューのリクエストDTOからいくつかの値にアクセスする必要があるため、応答htmlページに配置するURLを作成し、いくつかのフォームラベルにラベルを付けることができます。

とにかくこれを行う方法はありますか?このhtmlビューのためだけに、リクエストDTOからレスポンスDTOにプロパティを複製したくありません。別の製品の既存のRESTサービスをエミュレートしようとしているので、htmlビューのためだけに余分なデータを出力したくありません。

例えば http://localhost/rest/{Name}/details/{Id}

例えば

    @inherits ViewPage<DetailsResponse>
   @{

        ViewBag.Title = "todo title";
        Layout = "HtmlReport";
   }

これは、@Modelではなくリクエストdtoから取得する必要があります

<a href="/rest/@Model.Name">link to user</a>
<a href="/rest/@Model.Name/details/@Model.Id">link to user details</a>

4

1 に答える 1

4

アクセスする場合はRequest DTO、応答DTOに要求を追加することによって参照する必要があるため(これは実行したくない)、他のオプションは、IHttpRequest.Items渡すための推奨される方法であるディクショナリに追加することです。フィルタとサービス間のデータ。

public class MyService : Service {
    public object Any(MyRequest request) {
        base.Request.Items["RequestDto"] = request;
        return MyResponse { ... };
    }
}

次に、あなたの見解では:

@{
   var myRequest = (MyRequest)base.Request.Items["RequestDto"];
}

リクエストフィルターで再利用可能な機能をラップする

ビューでリクエストDTOに頻繁にアクセスする必要がある場合は、各サービスで手動で割り当てるのではなく、リクエストフィルター属性を作成するか、グローバルリクエストフィルターで常に割り当てる必要があります。

public class SetRequestDtoAttribute : RequestFilterAttribute {
    public override void Execute(
        IHttpRequest req, IHttpResponse res, object requestDto)
    {
        req.Items["RequestDto"] = requestDto;
    }
}

[SetRequestDto]次に、アクション、サービス、リクエストDTO、または基本クラスのいずれかで、さまざまなレベルの粒度で属性を装飾することにより、この動作を追加できます。

于 2012-11-07T07:41:03.060 に答える