ContentResult与字符串

时间:2013-08-28 07:57:52

标签: asp.net asp.net-mvc string return-value

我最近被问到为什么要使用ContentResult而不是返回string。不幸的是,我无法给出更好的答案:“这是最好的做法。”

有没有人有更好的答案?

更好地理解这个问题。有什么区别?

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

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

6 个答案:

答案 0 :(得分:38)

如果您返回ActionResult以外的其他内容,则默认行为是创建ContentResult包装调用ToString()的结果,而不是您返回的内容(或EmptyResult如果您已退回null。我可以考虑明确返回ContentResult的原因:

  • 它强化了这个方法是一个动作而不是常规方法的事实,因此开发人员不太可能犯错误,比如随便重命名它。
  • 如果您将来需要指定内容类型,则无需更改方法签名。
  • 它不会隐藏ToString()来电。如果您返回string,这无关紧要,但返回复杂类型可能会产生意外结果。

答案 1 :(得分:14)

你不能在返回ActionResult的方法上返回一个字符串,所以这就是你可以使用ContentResult返回一个像这样的普通字符串:

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

默认情况下,ContentResult返回text/plain类型。如果您只需要返回一个字符串,那么您将使用该方法返回一个字符串

答案 2 :(得分:6)

两个主要优点:

  • 您可以通过ContentEncoding属性
  • 指定内容编码
  • 您可以通过ContentType属性
  • 指定内容类型(即'text / html')

此外,如果您希望对其进行OO-clean,ContentResult以及所有ActionResult派生类,请遵循Command Pattern,为ExecuteResult提供{{1}}命令。 MVC管道运行。

答案 3 :(得分:1)

返回ContentResult有助于保护您的应用程序。

例如,如果您的应用程序允许来自用户的输入,则恶意用户可能会尝试解析javascript文本。这将阻止javascript在您的应用程序中执行

答案 4 :(得分:0)

我所知道的一个区别是:

如果需要,内容返回结果不带引号。

字符串一直在引号中返回结果。

答案 5 :(得分:0)

另一个区别是内容结果可以返回不同内容的结果。像字符串,Html,JavaScript结果等。

但字符串只返回字符串结果。