2013-08-28 2 views
32

Недавно мне было предложено использовать ContentResult вместо возврата строки. К несчастью, я не мог дать лучшего ответа, чем: «Это лучшая практика».Asp.Net Mvc: ContentResult против строки

У кого-нибудь есть лучший ответ?


Обновление: Чтобы лучше понять вопрос. Какая разница?

public ActionResult Foo(){ 
    return Content("Some string"); 
} 

public string Bar(){ 
    return "Some string"; 
} 

ответ

32

Если вы возвращаете что-то другое, чем ActionResult поведение по умолчанию, чтобы создать ContentResult оберточной результат вызова ToString() на то, что вы сделали вернуться (или EmptyResult, если вы вернулись null причин я могу думать, чтобы явно вернуться ContentResult:.

  • Это подтверждает тот факт, что этот метод является действие, а не обычный метод, поэтому разработчики имеют меньше шансов сделать ошибку как небрежно переименовывая его.
  • Если в будущем вам нужно указать тип содержимого, вам не нужно будет менять подпись метода.
  • Он не скрывает вызов ToString(). Это не имеет значения, если вы возвращаете string, но возврат сложного типа может привести к неожиданным результатам.
12

Вы не можете вернуть строку на метод, который возвращает ActionResult, так это то, когда вы могли бы использовать ContentResult для возврата простой строки так:

public ContentResult Hello() 
{ 
    return Content("hello world!"); 
} 

ContentResult по умолчанию возвращает тип text/plain. Если вы только когда-либо необходимо, чтобы вернуть строку, то вы бы использовать метод возвращает строку

+0

Зачем должно возвращаться сообщение ActionResult? – Tobias

+6

В MVC 4 тип содержимого по умолчанию для 'ContentResult' является' text/html'. (Источник: я просто попробовал.) –

+0

Отличный ответ с примером! – usefulBee

1

Одна разница, как я знаю:

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

Строка возвращает результат в котировальных марках все время.

4

два основных преимущества:

  • Вы можете указать кодировку содержимого можно указать тип содержимого через ContentEncoding собственности
  • (то есть, 'текст/html') через ContentType собственности

Кроме того, если вы хотите быть OO-чистым, ContentResult, а также все производные классы ActionResult следует за Command Pattern, предоставляя команду ExecuteResult для трубы MVC для запуска.

1

Возврат ContentResult помогает защитить ваше приложение.

E.g Если ваше приложение позволяет вводить пользователя, злоумышленник может попытаться проанализировать текст javascript. Это предотвратит выполнение javascript в вашей заявке

Смежные вопросы