Как эффективно искать строку и вставлять в C # - PullRequest
1 голос
/ 14 октября 2010

Мне нужно вставить текст в тело ответа http, сгенерированного ASP.NET MVC ViewResult.Я расширил ViewResult и переопределил метод ExecuteResult, и на этом этапе:

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() это?

Спасибо

Ответы [ 4 ]

1 голос
/ 14 октября 2010

Я не знаю, актуальна ли эта информация или нет, но эта статья о codeproject выглядит так, как будто в ней есть несколько замечательных сравнений, которые вы можете запустить, чтобы выяснить, что лучше всего работает в вашей ситуации:

http://www.codeproject.com/KB/string/fastestcscaseinsstringrep.aspx

1 голос
/ 14 октября 2010

А как насчет StringBuilder.Replace ?

Одна из проблем заключается в том, что он чувствителен к регистру.

0 голосов
/ 14 октября 2010
string textToInsert = "Nick";
string searchstring = "<body></body>";
StringBuilder builder = new StringBuilder(searchstring);
builder.Insert(searchstring.IndexOf("<body>", 0, StringComparison.InvariantCultureIgnoreCase).Length, textToInsert);

Это выдаст Nick

Проблема в том, что вам всегда нужно использовать tostring stringbuilder.: (

Обновление: вот способ оптимизировать ваш запрос http://www.codeproject.com/KB/string/string_optimizations.aspx

0 голосов
/ 14 октября 2010

Вот один из методов:

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

Это устраняет проблему забвения части "<body>" + textToInsert (в замене) и очищает код:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...