众多的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分析的更多相关文章

  1. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

  2. 【spring源码分析】IOC容器初始化(七)

    前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...

  3. 【spring源码分析】IOC容器初始化(十一)

    前言:前面分析了doCreateBean中的createBeanInstance函数,接下来分析其剩余流程. 首先贴上doCreateBean函数: // AbstractAutowireCapabl ...

  4. Android异步任务处理框架AsyncTask源代码分析

    [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] 引言 在平时项目开发中难免会遇到异步耗时的任务(比方最常见的网络请求).遇到这样的问题.我 ...

  5. android4.3 Bluetooth分析之扫描分析

    android4.3中引入了蓝牙低能耗le(low energy),相应的也有一些方法/类.不过代码里,并没有找到初始调用的地方.所以这里还是先只分析下bt普通的扫描流程(类似android 4.2) ...

  6. 扩增子分析QIIME2. 1简介和安装

    原网站:https://blog.csdn.net/woodcorpse/article/details/75103929 声明:本文为QIIME2官方帮助文档的中文版,由中科院遗传发育所刘永鑫博士翻 ...

  7. 【spring源码分析】IOC容器初始化——查漏补缺(五)

    前言:我们知道在Spring中经常使用配置文件的形式对进行属性的赋值,那配置文件的值是怎么赋值到属性上的呢,本文将对其进行分析. 首先了解一个类:PropertySourcesPlaceholderC ...

  8. spark源码分析以及优化

    第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...

  9. Spring - RestTemplate执行原理分析

    什么是RestTemplate Synchronous client to perform HTTP requests, exposing a simple, template method API ...

随机推荐

  1. scala + intellij idea 环境搭建及编译、打包

    大数据生态圈中风头正旺的Spark项目完全是采用Scala语言开发的,不懂Scala的话,基本上就没法玩下去了.Scala与Java编译后的class均可以运行于JVM之上,就好象.NET中F#与C# ...

  2. 打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机

    如果一台电脑同时连接多个打印机,而且每个打印机使用的纸张大小各不相同(比如:票据打印钱用的小票专用张,办公打印机用的是A4标准纸),在处理打印类的需求时,如果不用代码干预,用户必须每次打印时,都必须在 ...

  3. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree

    LeetCode:Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth ...

  4. leetcode 315. Count of Smaller Numbers After Self 两种思路(欢迎探讨更优解法)

    说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒". ...

  5. ASP.NET 系列:单元测试之SmtpClient

    使用SmtpClient发送Email时,我们可以创建ISmtpClient接口和SmtpClientWrapper适配类,在单元测试中对ISmtpClient进行Mock或自定义FackeSmtpC ...

  6. js的this什么时候会出现报错

    var aa ={ name:"boy", age:, like: function(){ console.log(this.name); } } //aa.like();//这样 ...

  7. [BZOJ1116][Poi2008]LCO(并查集)

    题目:http://hzwer.com/3010.html 分析:注意这里无向边是对入度没有贡献的. 那么对于一个n个点的连通块而言,如果它是一颗树(n-1条边),那么把所有边全部从某个根开始向下指, ...

  8. 详解C语言的htons和htonl函数、大尾端、小尾端

    在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序. 在Intel机器下,执行以下程序 int main(){   printf(" ...

  9. MVC————扩展方法MvcHtmlString

    使用前: public static class MyHtmlHelper { public static string GroupPage(this HtmlHelper helper) { str ...

  10. useradd 添加用户

    功能介绍 useradd命令用于Linux中创建的新的系统用户.useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号.使用useradd指令所建 ...