.NET MVC5简介(三)Result

Ajax请求数据响应格式,一个醒目组必须是赞成的,前端才知道怎么应付,还有不少其余状况,好比异常了,有ExceptionFilter,按照固定格式返回,好比没有权限,Authorization,按照固定格式返回。html

Http请求的本质:前端

  请求--应答式,响应能够那么丰富?不一样的类型其实方式同样的,只不过有个ContenetType的差异,html--text/html、json--application/json、xml/application/xml、js--application/JavaScript、ico--image/x-icon、image/gif、image/jepg、image/png.....json

  这个等因而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/commonsapp

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

调用的时候:ide

 /// <summary>
 /// 返回ActionResult--MVC框架会执行其ExecuteResult方法---
 /// </summary>
 /// <returns></returns>
 public NewtonJsonResult JsonResultNewton()
 {
     return new NewtonJsonResult(new AjaxResult()
     {
         Result = DoResult.Success,
         DebugMessage = "这里是JsonResult"
     });
 }

AjaxResult:this

 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 = 0,
     Success = 1,
     OverTime = 2,
     NoAuthorization = 3,
     Other = 255
 }
View Code

自定义扩展XMLResultspa

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

相关文章
相关标签/搜索