.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中的 ...
随机推荐
- 深挖计算机基础:趣谈Linux操作系统学习笔记
参考极客时间专栏<趣谈Linux操作系统>学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔 ...
- win10禁止自动更新的终极方法(亲测有效)
想必用过win10的朋友对其自动更新一定不会陌生,并且深恶痛绝, 有时正专注做一件事,突然就开始自动更新,被杀个措手不及,而且更新时间真的太久了,尤其最近更新频繁,真是伤脑筋, 期间也尝试 ...
- UTXO和Account模型一个都不能少
UTXO对于非区块链从业人员来说可能比较陌生,UTXO的全称是Unspent Transaction Output,这中本聪在比特币中的一个天才设计.而Account模型就很常见,也很容易理解,你银行 ...
- Quartz.NET总结(三)如配置jobs
前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.lo ...
- Thinkphp <= 5.0.10 缓存getshell复现
目录 Thinkphp <= 5.0.10 缓存getshell复现 0x01 poc 0x02 跟踪源码 0x03 审计思路 0x04 补丁 0x05 参考 Thinkphp <= 5. ...
- C++ float vs double
精度 相比 float ,double 从其名字上已经展示出,它的精度是前者的两倍,他们的精度分别为: float: 7 位数字 double: 15 位数字 可通过如下的示例看出,在重复进行计算时, ...
- 轻松搞定项目中的空指针异常Caused by: java.lang.NullPointerException: null
大家在项目测试过程中,是不是经常会碰到这个空指针异常呢Caused by: java.lang.NullPointerException: null 当大家遇到这个问题,大家是怎么处理?自己解决还是让 ...
- Linux相关集合
本篇概述 Linux xshell6 连接 Hadoop 启动关闭 Linux xshell6 连接相关问题 首先,虚拟机 得先能通成网(具体教程可百度) 然后,进行 本机 ip 的查询(xshell ...
- [20191115]oracle实例占用内存计算.txt
[20191115]oracle实例占用内存计算.txt --//以前学习oracle数据库时,总想了解实例占用内存多少,我曾经在一些会议底下问过一位高手,对方说计算这个相对很难,许多东西是共享的.- ...
- HTML5中像网页中保存cookie的实现
if(window.plus)//判断当前的设备是手机 window.localStorage.setItem("key","value");//设置值 win ...