MVC5-3 Result分析
众多的Result
使用MVC进行开发,可以看到有ActionResult、ContentReuslt、JsonResult..等,今天对这些Result进行背后分析。它到底是如何做到的
ActionResult
在开发中大家都会遇到一个有趣的现象,使用ActionResult做返回类型,我们可以返回Json,View,Content及其它的Result, 为什么会做到这样呢?
分析一下,我们使用什么可以做到。可能有些人已经猜到了,抽象类和接口。接口的定义规则是I开头。那么这里并没有。毫无疑问就是抽象类了。下图可以看到,ActionResult其实就是一个抽象类,里面有一个抽象方法ExecuteResult。这里就毫无疑问了,返回类型ActionResult可以使用Json、Content、View等。是因为它们都继承了ActionResult并实现了ExecuteResult方法!
常用的Result原理解析
JsonResult
JsonResult是一个很常用的Result,直接Json(str)的方式非常的简单。
下图可以直观的看到JsonResult继承自ActionResult。这里印证了我们之间的猜测。实现了ExecuteResult方法。可以看到,拿到了HttpContext上下文对象。然后把Response的ConnType="application/json",使用JavaScriptSerializer进行序列化后再返回。
就这么简单。Json还有一个JsonRequestBehavior参数,设置此方法数据的安全性。默认把Get请求过滤掉的,这里可以看到构造函数进行了赋值。我们也可以手动更改

ContentResult
直接Content返回数据在MVC中也很常用,结合JsonResult的原理去看Content参数。这时候应该已经想到了它的背后是如何处理的了。
比较JsonResult,它更为简单。因为只是返回文本,参数有文本内容,返回文本类型与编码格式。调用Response.Write也没有什么好多说的

JavaScriptResult
JavaScriptResult看起来很酷,因为我们可以直接返回javascript代码,这让不少小伙伴感到兴奋,看一下背后是怎么做的
很简单,把Response.ContentType赋值为"application/x-javascript"然后Write。

FileResult
大家应该都已经可以猜到它的背后是如何处理的了。是不是WriteFile呢?
没错,确实是WriteFile。有六个重载所以代码也比较多,不过也没有什么神奇的地方,相信大家都可以理解

MVC5-3 Result分析的更多相关文章
- 【spring源码分析】IOC容器初始化(二)
前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...
- 【spring源码分析】IOC容器初始化(七)
前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...
- 【spring源码分析】IOC容器初始化(十一)
前言:前面分析了doCreateBean中的createBeanInstance函数,接下来分析其剩余流程. 首先贴上doCreateBean函数: // AbstractAutowireCapabl ...
- Android异步任务处理框架AsyncTask源代码分析
[转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 引言 在平时项目开发中难免会遇到异步耗时的任务(比方最常见的网络请求).遇到这样的问题.我 ...
- android4.3 Bluetooth分析之扫描分析
android4.3中引入了蓝牙低能耗le(low energy),相应的也有一些方法/类.不过代码里,并没有找到初始调用的地方.所以这里还是先只分析下bt普通的扫描流程(类似android 4.2) ...
- 扩增子分析QIIME2. 1简介和安装
原网站:https://blog.csdn.net/woodcorpse/article/details/75103929 声明:本文为QIIME2官方帮助文档的中文版,由中科院遗传发育所刘永鑫博士翻 ...
- 【spring源码分析】IOC容器初始化——查漏补缺(五)
前言:我们知道在Spring中经常使用配置文件的形式对进行属性的赋值,那配置文件的值是怎么赋值到属性上的呢,本文将对其进行分析. 首先了解一个类:PropertySourcesPlaceholderC ...
- spark源码分析以及优化
第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...
- Spring - RestTemplate执行原理分析
什么是RestTemplate Synchronous client to perform HTTP requests, exposing a simple, template method API ...
随机推荐
- 帆软FineReport如何使用程序数据集
大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表 ...
- MVC Form异步请求
@using (Ajax.BeginForm("CreateReviewInfo", "Review", new AjaxOptions { HttpMetho ...
- hibernate Expression详解
关键字: hibernate expression hibernate Expression详解Expression.gt:对应SQL条件中的"field > value " ...
- android animation中的参数interpolator详解
android:interpolator interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果可以 accelerated(加速),decelerated(减速), ...
- Java 自动装箱与拆箱(Autoboxing and unboxing)
什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = ...
- Javascript/jQuery 获取地址栏URL参数的方法
1.jquery获取url很简单,代码如下 window.location.href; 2.javascript获取url参数 function getUrlParam(name) { var reg ...
- 使用webpack搭建vue开发环境
最近几天项目上使用了vue.js作为一个主要的开发框架,并且为了发布的方便搭配了webpack一起使用.CSS框架使用的是vue-strap(vue 对bootstrap控件做了封装)这篇文章主要总结 ...
- Oracle之物化视图
来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...
- extJS 创建类
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Java--笔记(2)
11.根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件: 1)互斥条件(Mutual ...