Reputation: 2985
I recently was asked why to use ContentResult
instead of returning string
. Unfortunately I could not give a better answer than: "It is best practice."
Does anyone have a better answer?
To better understand the question. What's the difference?
public ActionResult Foo(){
return Content("Some string");
}
public string Bar(){
return "Some string";
}
Upvotes: 45
Views: 62954
Reputation: 2700
Two main advantages:
ContentEncoding
propertyContentType
propertyAlso, 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.
Upvotes: 7
Reputation: 3895
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
:
ToString()
call. This doesn't matter if you're returning string
, but returning a complex type could have unexpected results.Upvotes: 46
Reputation: 11
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.
Upvotes: 0
Reputation: 554
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
Upvotes: 1
Reputation: 19
One difference as i know is :
Content return result without quotations marks if you want.
String return result in Quotations marks all the time.
Upvotes: 0
Reputation: 1935
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
Upvotes: 17