我最近被问到为什么要使用ContentResult
而不是返回string
。不幸的是,我无法给出更好的答案:“这是最好的做法。”
有没有人有更好的答案?
更好地理解这个问题。有什么区别?
public ActionResult Foo(){
return Content("Some string");
}
public string Bar(){
return "Some string";
}
答案 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
属性此外,如果您希望对其进行OO-clean,ContentResult
以及所有ActionResult
派生类,请遵循Command Pattern,为ExecuteResult
提供{{1}}命令。 MVC管道运行。
答案 3 :(得分:1)
返回ContentResult有助于保护您的应用程序。
例如,如果您的应用程序允许来自用户的输入,则恶意用户可能会尝试解析javascript文本。这将阻止javascript在您的应用程序中执行
答案 4 :(得分:0)
我所知道的一个区别是:
如果需要,内容返回结果不带引号。
字符串一直在引号中返回结果。
答案 5 :(得分:0)
另一个区别是内容结果可以返回不同内容的结果。像字符串,Html,JavaScript结果等。
但字符串只返回字符串结果。