Asp.Net Mvc:ContentResult与字符串

Tob*_*ias 39 asp.net string asp.net-mvc return-value

我最近被问到为什么要使用ContentResult而不是返回字符串.不幸的是,我无法给出更好的答案:"这是最好的做法."

有没有人有更好的答案?


更新:为了更好地理解这个问题.有什么不同?

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

public string Bar(){
    return "Some string";
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ble 40

如果你返回的东西不是ActionResult默认行为,那就是创建一个ContentResult包装调用ToString()你返回的内容的结果(或者EmptyResult如果你返回了null.我可以想到明确返回的原因ContentResult:

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


Dan*_*ady 14

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

public ContentResult Hello()
{
    return Content("hello world!");
}
Run Code Online (Sandbox Code Playgroud)

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

  • 在MVC 4中,`ContentResult`的默认内容类型是`text/html`.(来源:我刚试过了.) (6认同)
  • 如果你想确保响应的内容类型是`text/plain`而不是`text/html`,那么使用`Content`方法的重载,该方法将第二个参数作为内容类型规范. (2认同)

chr*_*ofr 6

两个主要优点:

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

此外,如果您希望对它进行OO-clean,则ContentResult与所有ActionResult派生类一起,通过提供运行MVC管道的命令来遵循命令模式ExecuteResult.