首页新闻找找看学习计划

初学mvc关于控制器返回类型求解!!

0
[待解决问题]
   public ActionResult Index()
        { 
            return Json(stu, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Index2()
        { 
            return Json(stu, JsonRequestBehavior.AllowGet);
        }
这两个写法一样吧,平时直接用ActionResult 就可以吧,如果结果都一样,为啥不直接保留一个ActionResult 
efreer的主页 efreer | 初学一级 | 园豆:2
提问于:2017-07-12 13:31
< >
分享
所有回答(3)
0

你看一下MSDN上的这张图就明了了,

namespace Microsoft.AspNetCore.Mvc
{
  /// <summary>
  /// An action result which formats the given object as JSON.
  /// </summary>
  public class JsonResult : ActionResult
  {
    /// <summary>
    /// Gets or sets the <see cref="T:Microsoft.Net.Http.Headers.MediaTypeHeaderValue" /> representing the Content-Type header of the response.
    /// </summary>
BUTTERAPPLE | 园豆:2918 (老鸟四级) | 2017-07-12 13:44

我知道是继承关系,但是感觉有点怪怪的

支持(0) 反对(0) efreer | 园豆:2 (初学一级) | 2017-07-12 13:52

就像 返回int 返回string 都继承object 但是为什么我们不写object返回呢

支持(0) 反对(0) efreer | 园豆:2 (初学一级) | 2017-07-12 13:53

@efreer:
如果你Controller想要返回 Json类型的数据时,你可以用JsonResult,一般用在比如WebApi 或者返回给手机客户端。
ActionResult 一般都是用来返回给一个View

支持(0) 反对(0) BUTTERAPPLE | 园豆:2918 (老鸟四级) | 2017-07-12 13:57

@BUTTERAPPLE: 但是json 写成 ActionResult也可以吧,性能有变化吗??内部有什么区别??

支持(0) 反对(0) efreer | 园豆:2 (初学一级) | 2017-07-12 14:01

@BUTTERAPPLE: 还是只为了调用者方面区分??

支持(0) 反对(0) efreer | 园豆:2 (初学一级) | 2017-07-12 14:02

@efreer: 可以是可以,但是主要区别还是在你获取到数据的时候,你需要进行类型转换。比如你刚才说的 object ,那我一个方法返回 1111 ,你觉得是 int 类型还是 string 类型呢?

支持(0) 反对(0) BUTTERAPPLE | 园豆:2918 (老鸟四级) | 2017-07-12 14:03

@BUTTERAPPLE: 但是ActionResult和 jsonresult 用什么都返回string 和 返回int 和object不一样啊,不需要类型转换

支持(0) 反对(0) efreer | 园豆:2 (初学一级) | 2017-07-12 14:22
0

ActionResult 可以返回 text xml json 等等格式内容

而JsonResult 返回Json格式 

默认情况下 如果只想返回 Json类型数据 就用JsonResult

代码也清晰点 

狂扁小朋友 | 园豆:28 (初学一级) | 2017-07-12 16:11
0

BUTTERAPPLE  已经说得很清楚了

就是ActionResult是抽象父类,JsonResult是它的子类,其他的子类都在图里。

你把action方法的返回值定义为 ActionResult或者JsonResult,在功能上没有任何不同。

 

这是C#面向对象编程中多态性的典型应用(基于抽闲类这种方式)。

 

西漠以西 | 园豆:1670 (小虾三级) | 2017-07-13 16:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册