.NET MVC5简介(三)Result
Ajax请求数据响应格式,一个醒目组必须是同意的,前端才知道怎么应付,还有很多其他情况,比如异常了,有ExceptionFilter,按照固定格式返回,比如没有权限,Authorization,按照固定格式返回。
Http请求的本质:
请求--应答式,响应可以那么丰富?不同的类型其实方式一样的,只不过有个ContenetType的差别,html--text/html、json--application/json、xml/application/xml、js--application/JavaScript、ico--image/x-icon、image/gif、image/jepg、image/png.....
这个等于是Http协议约定,Web框架和浏览器共同支持的。其实就是服务器告诉浏览器如何处理这个数据,从页面下载pdf或者页面展示pdf靠的就是ContentType,application/pdf、application/octet-stream。
MVC各种Result的事,JsonResult实际上就是JsonResult,继承ActionResult,然后重写ExecuteResult方法,指定ContentType为application/json,然后将Data序列化成字符串写入stream,我们可以随意扩展,只需要把数据放到response,指定好ContentType
ContentType对照表:http://tool.oschina.net/commons
/// <summary>
/// 返回ActionResult--MVC框架会执行其ExecuteResult方法---
/// </summary>
/// <returns></returns>
public JsonResult JsonResultIn()
{
return Json(new AjaxResult()
{
Result = DoResult.Success,
DebugMessage = "这里是JsonResult"
}, JsonRequestBehavior.AllowGet);
}
比如我们现在来扩展个NewtonJsonResult
public class NewtonJsonResult : ActionResult
{
private object Data = null;
public NewtonJsonResult(object data)
{
this.Data = data;
}
public override void ExecuteResult(ControllerContext context)
{
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = "application/json";
response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(this.Data));
}
}
调用的时候:
/// <summary>
/// 返回ActionResult--MVC框架会执行其ExecuteResult方法---
/// </summary>
/// <returns></returns>
public NewtonJsonResult JsonResultNewton()
{
return new NewtonJsonResult(new AjaxResult()
{
Result = DoResult.Success,
DebugMessage = "这里是JsonResult"
});
}

AjaxResult:
public class AjaxResult
{
public AjaxResult()
{ }
public string DebugMessage { get; set; }
public string PromptMsg { get; set; }
public DoResult Result { get; set; }
public object RetValue { get; set; }
public object Tag { get; set; }
}
public enum DoResult
{
Failed = ,
Success = ,
OverTime = ,
NoAuthorization = ,
Other =
}
自定义扩展XMLResult
/// <summary>
/// 自定义扩展XML格式result
/// </summary>
public class XmlResult : ActionResult
{
private object _data; public XmlResult(object data)
{
_data = data;
} public override void ExecuteResult(ControllerContext context)
{
var serializer = new XmlSerializer(_data.GetType());
var response = context.HttpContext.Response;
response.ContentType = "text/xml";
serializer.Serialize(response.Output, _data);
}
}
public XmlResult XmlResult()
{
return new XmlResult(new AjaxResult()
{
Result = DoResult.Success,
DebugMessage = "这里是JsonResult"
});
}

现在,我们不写返回值,直接写入stream
/// </summary>
public void JsonResultVoid()
{
HttpResponseBase response = base.HttpContext.Response;
response.ContentType = "application/json";
response.Write(
Newtonsoft.Json.JsonConvert.SerializeObject(new AjaxResult()
{
Result = DoResult.Success,
DebugMessage = "这里是JsonResult"
}));
}

.NET MVC5简介(三)Result的更多相关文章
- ASP.NET MVC5(三):表单和HTML辅助方法
表单的使用 Action和Method特性 Action特性用以告知浏览器信息发往何处,因此,Action特性后面需要包含一个Url地址.这里的Url地址可以是相对的,也可以是绝对的.如下Form标签 ...
- .NET MVC5简介(四)Filter和AuthorizeAttribute权限验证
在webform中,验证的流程大致如下图: 在AOP中: 在Filter中: AuthorizeAttribute权限验证 登录后有权限控制,有的页面是需要用户登录才能访问的,需要在访问页面增加一个验 ...
- Struts2学习笔记(三):result配置的各项视图转发类型
Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...
- Redis简介三
目录 一.Key 二.String 三.Hash 四.List 五.Set 六.SortedSet 七.Pub/Sub 八.Transaction 九.Script 十.Connection 十一.S ...
- Struts2基础学习(三)—Result和数据封装
一.Result Action处理完用户请求后,将返回一个普通的字符串,整个普通字符串就是一个逻辑视图名,Struts2根据逻辑视图名,决定响应哪个结果,处理结果使用<result&g ...
- WmS简介(三)之Activity窗口是如何创建的?基于Android7.0源码
OK,在前面两篇博客中我们分别介绍了WmS中的token,同时也向小伙伴们区分了Window和窗口的区别,并且按照type值的不同将Android系统中的窗口分为了三大类,那么本篇博客我们就来看看应用 ...
- web API简介(三):客户端储存之Web Storage API
概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...
- MyBatis之Mapper XML 文件详解(三)-Result Maps
resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情 ...
- .NET MVC5简介(六)HttpHandler
浏览器到网站程序 上一篇中,介绍IHttpModule的时候,自定义一个类CustomHttpModule继承自IHttpModule,自定义一个事件,并配合配置文件,就可以执行自定义Module中的 ...
随机推荐
- Springcloud 中 SpringBoot 配置全集 (收藏版)
Springcloud 中 SpringBoot 配置全集 (收藏版) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 前言 疯狂创客圈(笔者尼恩创建的高并发研习社群 ...
- 基于python的yaml配置文件使用方法
一.介绍 YAML是一种简洁的非标记语言 YAML以数据为中心,使用空白.缩进.分行组织数据,从而使表达更加简洁易懂 二.基本规则 大小写敏感 使用缩进表示层级关系 禁止使用Tab缩进,只能使用空格键 ...
- linux命令--网络命令
一.网络命令 1.配置ip 1.1 配置 IP 地址 IP 地址是计算机在互联网中唯一的地址编码.每台计算机如果需要接入网络和其他计算机进行数 据通信,就必须配置唯一的公网 IP 地址. 配置 IP ...
- Maven 教程之 pom.xml 详解
作者:dunwu https://github.com/dunwu/blog 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. My ...
- MySql-8.0.16-winx64 安装
参考文章: https://www.cnblogs.com/lxlin/p/9635350.html https://www.cnblogs.com/xc1234/p/9050149.html MyS ...
- js的try catch使用心得
1 try catch的使用,永远应该放在你的控制范围之内,而不应该防范未知的错误.也就是说你很清楚知道这里是有可能”出错“的,而且你很清楚知道什么前提下会出错,你就是要故意利用报错信息来区分错误 ...
- thinkphp 5.x No input file specified 解决
原规则: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond ...
- Java - IO 扫描流:Scanner
IO_扫描流:Scanner 在改进输出功能不足方面提供了打印流(PrintSream):利用BufferedReader类(缓冲输入流)解决了大文本数据的输入和读取操作,但是BufferedRead ...
- 【转载】Android IntentService使用全面介绍及源码解析
一 IntentService介绍 IntentService定义的三个基本点:是什么?怎么用?如何work? 官方解释如下: //IntentService定义的三个基本点:是什么?怎么用?如何wo ...
- sqlserver实现分隔字符串
sqlserver 使用函数实现分隔字符串 create function dbo.fn_split ( @str_source nvarchar(max), ) ) returns @temp ta ...