2010-10-14 92 views
1

我需要將一些文本注入由ASP.NET MVC ViewResult生成的http響應正文中。我擴展了ViewResult並覆蓋了ExecuteResult方法,在這一點上:在這一點上:如何高效地搜索字符串並在C#中插入

this.View.Render(viewContext, context.HttpContext.Response.Output); 

我需要攔截響應輸出。

我知道我可以這樣做:

var builder = new StringBuilder(); 
var writer = new StringWriter(builder); 
this.View.Render(viewContext, writer); 

// adjust builder 

context.HttpContext.Response.Write(builder); 

但我不知道什麼是最好的方式去這樣做的注射。我怎樣纔能有效地操縱響應體字符串?我需要搜索</body>(這將接近字符串的末尾),然後插入一些文本。

更新我想插入的文本將輸出到TextWriter。有沒有辦法避免ToString()呢?

謝謝

回答

0

下面是一個方法:

StringBuilder sb = new StringBuilder(theText); 
int idx = theText.IndexOf("<body>"); 
sb.Insert(idx + "<body>".Length, textToInsert); 
theText = sb.ToString(); 

這消除忘記具有​​一部分(在替換)的問題,並清除碼:)

+0

我沒有文本作爲一個字符串,它從一個TextWriter過來我知道我可以的ToString(),但是,這個似乎不像最有效的方式 – 2010-10-14 17:52:28

+0

你的代碼假定他是可用的字符串,但他老有StringBuild呃和StringWriter。當然,他可以使用sb.ToString()進行.fexOf調用。 – CodesInChaos 2010-10-14 17:52:50

0
string textToInsert = "Nick"; 
string searchstring = "<body></body>"; 
StringBuilder builder = new StringBuilder(searchstring); 
builder.Insert(searchstring.IndexOf("<body>", 0, StringComparison.InvariantCultureIgnoreCase).Length, textToInsert); 

將輸出尼克

問題是你總是不得不對tostring stringbuilder。 :(

更新:這裏是優化您的查詢http://www.codeproject.com/KB/string/string_optimizations.aspx

相關問題