ContentResult против строки
Недавно меня спросили, зачем использовать ContentResult
вместо возврата string
. К сожалению, я не мог дать лучший ответ, чем: "Это лучшая практика".
У кого-нибудь есть лучший ответ?
Чтобы лучше понять вопрос. Какая разница?
public ActionResult Foo(){
return Content("Some string");
}
public string Bar(){
return "Some string";
}
Ответы
Ответ 1
Если вы возвращаете что-то отличное от ActionResult
, поведение по умолчанию состоит в том, чтобы создать ContentResult
, завершая результат вызова ToString()
на то, что вы вернули (или EmptyResult
, если вы вернули null
). Причины я могут явно возвращать ContentResult
:
- Это усиливает тот факт, что метод - это действие, а не обычный метод, поэтому разработчики с меньшей вероятностью допускают ошибки, такие как небрежное переименование.
- Если в будущем вам нужно указать тип содержимого, вам не нужно будет менять подпись метода.
- Он не скрывает вызов
ToString()
. Это не имеет значения, если вы возвращаете string
, но возврат сложного типа может привести к неожиданным результатам.
Ответ 2
Вы не можете вернуть строку для метода, который возвращает ActionResult, поэтому вы можете использовать ContentResult для возврата простой строки, например:
public ContentResult Hello()
{
return Content("hello world!");
}
ContentResult по умолчанию возвращает тип text/plain
. Если вам понадобится только вернуть строку, то вы должны использовать метод для возврата строки
Ответ 3
Два основных преимущества:
- Вы можете указать кодировку содержимого через свойство
ContentEncoding
- Вы можете указать тип содержимого (т.е. Text/html) через свойство
ContentType
Кроме того, если вы хотите быть OO-чистого об этом, ContentResult
, вместе со всем ActionResult
производных классы следует команде, обеспечивая ExecuteResult
команды для трубопровода MVC для запуска.
Ответ 4
Возврат ContentResult помогает защитить ваше приложение.
Например, если ваше приложение позволяет вводить данные от пользователей, злоумышленник может попытаться проанализировать текст javascript. Это предотвратит выполнение javascript в вашем приложении
Ответ 5
Одно из различий, которое я знаю:
Результат возврата контента без кавычек, если вы хотите.
Строка возвращает результат в котировках пометки все время.
Ответ 6
Еще одно отличие заключается в том, что Content content может возвращать другой контентный результат. Как строка, HTML, JavaScript результат и т.д.
Но строка возвращает только строковый результат.