首页 技术 正文
技术 2022年11月6日
0 收藏 461 点赞 1,001 浏览 2541 个字

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"
});
}

.NET MVC5简介(三)Result

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"
});
}

.NET MVC5简介(三)Result

现在,我们不写返回值,直接写入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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849