Asp.Net Mvc: ContentResult vs. string

2019-02-03 23:45发布

I recently was asked why to use ContentResult instead of returning string. Unfortunatly I could not give a better answer than: "It is best practice."

Does anyone have a better answer?


Update: To better understand the question. What's the difference?

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

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

6条回答
不美不萌又怎样
2楼-- · 2019-02-03 23:49

If you return something other than an ActionResult the default behavior is to create a ContentResult wrapping the result of calling ToString() on whatever you did return (or EmptyResult if you returned null. Reasons I can think of to explicitly return ContentResult:

  • It reinforces the fact that the method is an action, rather than a regular method, so devs are less likely to make mistakes like casually renaming it.
  • If in the future you need to specify the content-type you won't need to change the method signature.
  • It doesn't hide the ToString() call. This doesn't matter if you're returning string, but returning a complex type could have unexpected results.
查看更多
男人必须洒脱
3楼-- · 2019-02-03 23:52

Two main advantages:

  • You can specify the content encoding via the ContentEncoding property
  • You can specify the content type (ie, 'text/html') via the ContentType property

Also, if you want to be OO-clean about it, ContentResult, along with all ActionResult derived classes follow the Command Pattern by providing an ExecuteResult command for the MVC pipeline to run.

查看更多
forever°为你锁心
4楼-- · 2019-02-03 23:52

One difference as i know is :

Content return result without quotations marks if you want.

String return result in Quotations marks all the time.

查看更多
Melony?
5楼-- · 2019-02-04 00:02

You can't return a string on a method which returns an ActionResult, so this is when you could use a ContentResult to return a plain string like so:

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

ContentResult by default returns a type of text/plain. If you only ever needed to return a string, then you would use the method to return a string

查看更多
贼婆χ
6楼-- · 2019-02-04 00:02

Returning a ContentResult helps protect your application.

E.g If your application allows input from users, a malicious user might try to parse a javascript text. This will prevent javascript from executing in your application

查看更多
Deceive 欺骗
7楼-- · 2019-02-04 00:05

One another difference is Content result can return different content's result. Like string, Html, JavaScript result etc.

But string return only the string result.

查看更多
登录 后发表回答