ContentResult vs. string
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 returningstring
, but returning a complex type could have unexpected results.
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.
UPDATE: 19-Nov-2020 The original Command Pattern link (dead link) was no longer working so I updated it to reference a similar Microsoft document. Also, to see a great explanation on the Command Pattern, view this link.
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