1

ServiceStack でプレーンな cshtml ファイル (サービスによってサポートされていない) を保護するための手法を使用しています。私が使用しているテクニックを以下に概説します。しかし、Razor 2 のサポートが ServiceStack に最近追加されたことで、私の実装が壊れてしまいました。

オリジナルの実装

using ServiceStack.Razor;
using ServiceStack.ServiceInterface;

public class SecuredViewPage : ViewPage
{
    public override void Init(ServiceStack.Razor.Templating.IRazorViewEngine viewEngine, ServiceStack.Html.ViewDataDictionary viewData, ServiceStack.ServiceHost.IHttpRequest httpReq, ServiceStack.ServiceHost.IHttpResponse httpRes)
    {
        new AuthenticateAttribute().Execute(httpReq, httpRes, this);

        base.Init(viewEngine, viewData, httpReq, httpRes);
    }

}

次に、私のcshtmlファイルには次のものがあります。

@inherits SecuredViewPage

現在の問題は、3.9.94 では Init メソッドがViewPageBaseの抽象メソッドではなくなったことです。

My Questions

これを達成するためのより良い方法はありますか?

また

ServiceStack が実装を変更するかどうかを確認する必要がありますか?

4

1 に答える 1

3

私は問題に対する独自の解決策を考え出しました。これが解決策としてどれほど優れているかはわかりませんが、私にはうまくいくようです。

基本的に、ViewPage.cs を Servicestack ソースからコピーし、認証チェックをそこに貼り付けました。

public class SecuredViewPage : ViewPageBase<dynamic>, IRazorView
{
    public HtmlHelper Html = new HtmlHelper();

    public override Type ModelType
    {
        get
        {
            return typeof(DynamicRequestObject);
        }
    }

    public void Init(IViewEngine viewEngine, IHttpRequest httpReq, IHttpResponse httpRes)
    {
        base.Request = httpReq;
        base.Response = httpRes;

        new AuthenticateAttribute().Execute(Request, Response, this);

        Html.Init(viewEngine: viewEngine, httpReq: httpReq, httpRes: httpRes, razorPage: this);
    }

    public override void SetModel(object o)
    {
        base.SetModel(o);
        Html.SetModel(o);
    }

    public void WriteTo(StreamWriter writer)
    {
        this.Output = Html.Writer = writer;
        this.Execute();
        this.Output.Flush();
    }

    public override void Execute()
    {
    }
}
于 2013-06-17T13:47:16.643 に答える