2011-01-31 69 views
0

Let's採取通常的aspx頁面,〜/管理/ template.aspx渲染頁面到自定義輸出

管理文件夾允許例如只有「管理員」角色。

現在我不想像往常一樣運行template.aspx,但我希望從活動進程中調用它。 假設我在〜/ admin/buildMyStuff.aspx上,那裏我正在收集一些數據,現在我有一些querystring,就像「?do = this $ andDo = that $ index = {0}」。現在我希望使用這個模板循環訪問我的數據並生成我的輸出,然後將它放在一個靜態html或文本文件或其他東西中。

我該怎麼做? 將其作爲新請求調用,等待響應?我必須做什麼,它是在「管理」角色下運行,還是自動執行,因爲我已經是管理員了?

或者還有另一種可能性,允許我運行模板頁面並指定我的自定義htmltextwriter作爲輸出嗎?

編輯:

public static string RenderPageAndGetHtml(string pageUrl, string pageQuery) 
    { 
     var sw = new StringWriter(); 
     var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw); 
     HttpRuntime.ProcessRequest(wr); 
     sw.Close(); 
     return sw.ToString(); 
    } 

這是解決方案。

但是:

看來,得到的SimpleWorkerRequest錯誤

以下情況:

〜/ Default.aspx的失敗

/default.aspx失敗

default.aspx Ok

EN/Default.aspx的失敗

/en/default.aspx失敗

〜/ EN/Default.aspx的失敗

編輯:

好吧,我實現了我的自定義的HttpWorkerRequest。現在它可以工作...

謝謝

回答

1

您需要template.aspx頁面的HTML代碼?試試這個功能,也許這就是你需要:

public static string RenderPageAndGetHtml(string pageUrl, string pageQuery) 
    { 
     var sw = new StringWriter(); 
     var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw); 
     HttpRuntime.ProcessRequest(wr); 
     sw.Close(); 
     return sw.ToString(); 
    } 
+0

這聽起來像正是這一點我正在尋找使用反斜線。有什麼我必須關心的,一些依賴關係,如httpcontext,它是通過httpmodules?如果我使用你的方法,如何看待用戶身份? – Luke 2011-01-31 15:04:37

+0

嗯,這是一個很好的問題 - 我不確定。我很少使用這個功能,現在我無法測試它。它是當前的ApplicationPool用戶或Web用戶。你能檢查一下嗎?順便說一句,我改變了我的答案,因爲Utf8WorkerRequest是一個自建的解決方案,你必須使用SimpleWorkerRequest。 – Marc 2011-01-31 17:24:35

0

好吧,我已經找到了UTF8WorkerRequest,但它只是爲的SimpleWorkerRequest設置爲UTF8編碼(這是UTF-16內部)。抱歉!

public class UTF8WorkerRequest : SimpleWorkerRequest 
{ 

    private TextWriter theWriter; 

    public UTF8WorkerRequest(string page, string query, TextWriter output) : base(page, query, output) 
    { 
     theWriter = output; 
    } 

    public UTF8WorkerRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output) : base(appVirtualDir, appPhysicalDir, page, query, output) 
    { 
     theWriter = output; 
    } 

    public override void SendResponseFromMemory(byte[] data, int length) 
    { 

     theWriter.Write(System.Text.Encoding.UTF8.GetString(data)); 

    } 
} 
1

伊尼一點要注意的是,SimpleWorkerRequest並不需要一個URL作爲輸入,但路徑......我浪費這幾個小時,這基本上意味着en/default.aspx將轉化爲

  • 頁面:en
  • pathInfo:默認值。ASPX

你需要在路徑

en\default.aspx