2013-06-13 38 views
1

我一直使用ServiceStack的技術,以確保我的純CSHTML文件(而不是由服務的支持),需要在普通CSHTML文件認證。我將在下面概述我使用的技術。但是,最近在ServiceStack中添加Razor 2支持已經破壞了我的實現。ServiceStack.Razor -

原來實行

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 

現在的問題是,在94年3月9日Init方法不再是一個抽象的方法在ViewPageBase

My Questions

是否有更好的方法來實現這一目標?

我應該看看ServiceStack將改變執行

回答

3

我想出了我自己的解決問題的方法。我不確定這是一個怎樣的解決方案,但它似乎對我有用。

我基本上是從Servicestack源複製ViewPage.cs並堅持我的驗證檢查在那裏。

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() 
    { 
    } 
} 
+0

你能分享你的authenticate attirbute嗎? –

+0

這是默認的ServiceStack驗證屬性。那裏沒有任何習俗。 – gregpakes

+0

Thankx快速響應... –

相關問題