一般我们返回一个结果,主要有返回值,执行结果信息,所以定义一个类

public  class QuestResult
    {

/// <summary>
        /// 返回值
        /// </summary>
        public object Result { get; set; }

/// <summary>
       /// 结果编码
       /// </summary>
        public ErrorCode Error { get; set; }

/// <summary>
       /// 结果编码描述
       /// </summary>
        public string ErrorMsg { get; set; }

/// <summary>
        /// 结果附近信息
        /// 主要是异常信息或者其它描述
        /// 例如:结果被截取
        /// </summary>
        public string ReslutMsg { get; set; }

}

对于返回的结果编码,采用枚举型方便扩展,而且可以为每个结对应的固定一个描述信息

public enum ErrorCode
    {

/// <summary>
        /// 成功
        /// </summary>
        /// 
        [Description("执行成功")]
        Sucess,

/// <summary>
        ///执行超时
        /// </summary>
        /// 
        [Description("执行超时")]
        TimeOut,

/// <summary>
        /// 执行异常
        /// </summary>
        /// 
        [Description("执行异常")]
        Exception,

/// <summary>
        /// 结果被截取
        /// </summary>
        /// 
        [Description("结果被截取")]
        Truncate,

}

再启用一个扩展方法,获取枚举的描述信息

/// </summary>
   public static class CommonExtend
    {
        /// <summary>
        /// 枚举描述
        /// </summary>
        private static Dictionary<string, string> dicEnum = new Dictionary<string, string>();
        /// <summary>
        /// 枚举描述特性获取信息
        /// </summary>
        /// <param name="value">枚举</param>
        /// <param name="isNameInstend">没有特性时是否直接使用字段名称</param>
        /// <returns></returns>
        public static string EnumDescription(this Enum value,bool isNameInstend=false)
        {
            Type type = value.GetType();
            string name = Enum.GetName(type, value);
            if (name == null)
            {
                return null;
            }
            string description = "";
            if (dicEnum.TryGetValue(type.FullName+"_"+name,out description))
            {
                return description;
            }
            FieldInfo field = type.GetField(name);
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attribute == null && isNameInstend == true)
            {
                return name;
            }
            //
            if(attribute!=null)
            {
                dicEnum[type.FullName + "_" + name] = attribute.Description;
            }
            return attribute == null ? null : attribute.Description;
        }
    }

这样就方便获取所有信息了,结果类中定义的ErrorMsg不是编码描述,而是在执行错误后的Exception信息。

这样一个类似标准的返回结果模板就差不多了。
---------------------
作者:jason成都
来源:CSDN
原文:https://blog.csdn.net/jinyuttt/article/details/83048606?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/jinyu20180311/p/9788601.html

c# 调用服务返回结果模板化相关推荐

  1. 验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型

    验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型 实现功能 C++实现代码 实现功能 验证 Boost.Optional 复制构造函数不会尝试调用从模板 ...

  2. 网易云容器服务微服务化实践—微服务测试及镜像化提测全流程实践

    前言 近几年,互联网项目很多都有从单体服务转变成微服务化的趋势,尤其是一些架构复杂,业务比较广泛的项目,微服务化是大势所趋,可以解决独立构建.更新.运维等一系列问题,从而解放生产力,促进交付效率和质量 ...

  3. javaweb网站开发模板化设计

    javaweb网站开发模板化设计 wang@20160620 前言 前一段时间想要开发一个BS架构的应用程序调用我开发的通讯驱动接口来和硬件设备进行通讯测试,以验证我的驱动接口及硬件设备的下端程序通讯 ...

  4. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  5. Blazor 模板化组件开发指南

    翻译自 Waqas Anwar 2021年4月15日的文章 <A Developer's Guide To Blazor Templated Components> [1] 在我之前的一篇 ...

  6. 异步服务_微服务全链路异步化实践

    1. 背景 随着公司业务的发展,核心服务流量越来越大,使用到的资源也越来越多.在微服务架构体系中,大部分的业务是基于Java 语言实现的,受限于Java 的线程实现,一个Java 线程映射到一个ker ...

  7. MVC 音乐商店 第 5 部分: 编辑窗体和模板化

    MVC 音乐商店是介绍,并分步说明了如何使用 ASP.NET MVC 和 Visual Studio 为 web 开发教程应用程序. MVC 音乐商店是一个轻量级的示例存储实现它卖音乐专辑在线,并实现 ...

  8. 公众号(服务号)模板消息(个人通知)开发方案

    公众号消息通知 微信公众号开发文档 公众号是以微信用户的一个联系人形式存在的,消息会话是公众号与用户交互的基础.目前公众号内主要有这样几类消息服务的类型,分别用于不同的场景. 1)群发消息:公众号可以 ...

  9. Blazor University (21)使用 RenderFragments 模板化组件 —— 传递占位符

    原文链接:https://blazor-university.com/templating-components-with-renderfragements/passing-placeholders- ...

  10. 【微服务架构】在微服务架构中最小化设计时间耦合

    理查森:我是克里斯·理查森.欢迎来到我关于在微服务架构中最小化设计时耦合的演讲.在这次演讲中,我将回答三个问题.什么是设计时耦合?这会造成什么问题?我们如何设计松散耦合的服务?这些年来我做了一些事情. ...

最新文章

  1. 原始代理需要改进的地方
  2. 关于移除节点的IE和Firefox的兼容问题
  3. 豆果美食,把人们带回厨房
  4. js中推断浏览器类型
  5. A problem occurred starting process 'command 'G:\Android\sdk\ndk-bundle\toolchains\mips64el-linux-an
  6. C# 线程问题之争用条件
  7. java中给组合框加监听器,如何区分ActionEvent中的多个组合框
  8. 拒绝云服务商白嫖,Elasticsearch 和 Kibana 变更开源许可协议
  9. 力扣-989 数组形式的整数加法
  10. paip.提升安全性-----动态KEY
  11. mac谷歌浏览器怎么登陆账户_Mac如何安装谷歌浏览器 Mac安装谷歌浏览器的方法...
  12. ffmpeg 转码及多线程处理
  13. Qt中其他类调用窗口中的ui控件
  14. 树莓派系统烧录 + 连接树莓派
  15. 灰色预测模型、新灰色预测模型、新陈代谢灰色预测模型
  16. python求15 17 23 65 97的因数_笨方法学python,Lesson15,16,17
  17. Aconvert 文档格式转换-PDF转免费转其他文档网址-免费
  18. Python删除字符串中的空格和特殊字符
  19. 考虑动态响应性能的社区综合能源系统基于模型预测控制的双层调度控制策略论文阅读分享
  20. Redis基础笔记(下)

热门文章

  1. mysql的数学函数开方_MySQL数学函数简明总结
  2. anaconda打开python文本编辑器_【python】anaconda中打开IDLE(python 自带编辑器)
  3. 永磁同步电机转子磁链_永磁同步电机转子初始位置检测、增量式光电编码器对位调零思路解析...
  4. 以太坊 智能合约IDE 在线 Solidity IDE
  5. kubernetes视频教程笔记 (24)-存储-PV和PVC
  6. Linux学习(4)vim编辑器的安装使用
  7. 计算机网络在物流领域的应用研究,计算机网络技术在物流经济领域中的应用特点及其作用.doc...
  8. linux通用内核,重新编译内核 - Linux通用系统优化大全_Linux教程_Linux公社-Linux系统门户网站...
  9. pyspark 数据写入hive_美团是如何应用Spark处理大数据的?
  10. Linux 杀死stuck线程,如何中断weblogic中stuck thread