zoukankan      html  css  js  c++  java
  • .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 = 0,
         Success = 1,
         OverTime = 2,
         NoAuthorization = 3,
         Other = 255
     }
    View Code

    自定义扩展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"
            }));
    }

  • 相关阅读:
    高级映射之事务
    配置tomcat-users.xml文件
    动态SQL之标签
    性能测试
    Service
    添加 aar 或 jar 包依赖 的方式
    安卓设备 以太网代理 问题排查
    剑指offer:面试题15、链表中倒数第 K 个结点
    剑指offer:面试题14、调整数组顺序使奇数位于偶数前面
    剑指offer:面试题13、在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/taotaozhuanyong/p/11575306.html
Copyright © 2011-2022 走看看