首先基于SOA的消息通信基本都是按照一个统一的协议规范进行交互,那么必须定义消息体。不同的交互结构设计了不同的消息体。

业界统一使用的SOAP是一种规范的XML消息内容。例如在WCF中返回的结果。

随着移动互联网的盛行,Rest交互的方式越来越受青睐。

微软的MVC3之后的版本,合并了Rest WCF,越来越强大。也就是现在ASP.NET web API.

基本用法就不提了,这里主要解说的是自定义消息体的实现:

1:消息体结构:

[DataContract]
    public class SendToClientMsgConteiner
    {
        /// <summary>
        /// 结果状态
        /// </summary>
        [DataMember(Name = "_s")]
        public MessageStatus Status { get; set; }         private string _Message = "";
        /// <summary>
        /// 消息
        /// </summary>
        [DataMember(Name = "_m")]
        public string Message
        {
            get { return _Message; }
            set { _Message = value; }
        }         /// <summary>
        /// 当前请求结果集
        /// </summary>
        [DataMember(Name = "_d")]
        public IEnumerable<IBusinessObject> Results { get; set; }     }
    public enum MessageStatus
    {
        /// <summary>
        /// 失败
        /// </summary>
        Error = 0,
        /// <summary>
        /// 成功
        /// </summary>
        Success = 1
    } 注意,这里涉及到.net 底层的对象序列化,如果需要自定义字段内容,可以使用此属性 DataContract ,屏蔽的话 可以使用JsonIgnore 。
2 控制器中的Action 在执行完毕后 返回此对象,即可自动将对象进行序列化为Json数据
 [HttpPost]
        [MessageFormator]
        public SendToClientMsgConteiner CalcReceiveClientProductPrice(ViewModelForCalcProductPriceClient clientData)
        {
            SendToClientMsgConteiner msg = new SendToClientMsgConteiner();             try
            {
                var priceItems = bll_ProductService.CalcReceiveClientProductPrice(clientData);
                msg.Status = MessageStatus.Success;
                msg.Results = new List<ViewModelForCalcProductPriceServer> { priceItems };
            }
            catch (Exception ex)
            {
                msg.Status = MessageStatus.Error;
                msg.Message = ex.ToString();
            }             return msg;
        } 3 如果需要对返回的内容进行过滤或者其它操作;那么可以为这个Action添加Filter
    /// <summary>
    /// 消息执行/返回的时候 拦截器
    /// </summary>
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
    public class MessageFormatorAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }         public override void OnActionExecuted(HttpActionExecutedContext filterContext)
        {
            
            var result = filterContext.Response.Content as ObjectContent<SendToClientMsgConteiner>;             if (null==result)
            {
                //不是自定义的SOAP消息 那么返回系统处理消息内容
                base.OnActionExecuted(filterContext);
                return;
            }             var msg = result.Value as SendToClientMsgConteiner;
            if (msg.Status== MessageStatus.Success)
            {
                //成功返回 没有错误消息 那么不需要消息体属性
                var content = new SendToClientMsgConteinerWithNoError
                {
                    Status = MessageStatus.Success,
                    Results = msg.Results
                };                 filterContext.Response.Content = new ObjectContent<SendToClientMsgConteinerWithNoError>(content, result.Formatter);
            }             //最后调用SDK 进行消息内容处理回发
            base.OnActionExecuted(filterContext); 
                    }
    } 以上方式就可以随意的进行自定义的消息内容操作订制了。

ASP.NET WEB API回发到客户端消息体的格式化的更多相关文章

  1. ASP.NET Web API 安全筛选器

    原文:https://msdn.microsoft.com/zh-cn/magazine/dn781361.aspx 身份验证和授权是应用程序安全的基础.身份验证通过验证提供的凭据来确定用户身份,而授 ...

  2. Asp.Net Web API 2第六课——Web API路由和动作选择

    Asp.Net Web API 导航 Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web AP ...

  3. Asp.Net Web API 2第五课——Web API路由

    Asp.Net Web API 导航   Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web ...

  4. 【ASP.NET Web API教程】3.4 HttpClient消息处理器

    原文:[ASP.NET Web API教程]3.4 HttpClient消息处理器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 3.4 ...

  5. ASP.NET Web API 控制器创建过程(一)

    ASP.NET Web API 控制器创建过程(一) 前言 在前面对管道.路由有了基础的了解过后,本篇将带大家一起学习一下在ASP.NET Web API中控制器的创建过程,这过程分为几个部分下面的内 ...

  6. 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【九】——API变了,客户端怎么办?

    系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 一旦我们将API发布之后,消费者就会开始使用并和其他的一些数据混在一起.然而,当新的需求出现 ...

  7. ASP.NET Web Api 服务器端变了,客户端该如何修改请求(转载)

    转载地址:http://www.cnblogs.com/fzrain/p/3558765.html 前言 一旦我们将API发布之后,消费者就会开始使用并和其他的一些数据混在一起.然而,当新的需求出现时 ...

  8. 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  9. 【ASP.NET Web API教程】3 Web API客户端

    原文:[ASP.NET Web API教程]3 Web API客户端 Chapter 3: Web API Clients 第3章 Web API客户端 本文引自:http://www.asp.net ...

随机推荐

  1. 多个ajax按照顺序执行的方法

    $.ajax({ dataType: "json", async: false, //只需将此属性设置为false url: ~~, type: "GET", ...

  2. MySQL 遇到的问题:在服务里找不到自己的 MySQL,以及在命令行窗口中运行服务出现的问题。

    1.用数据库的时候在服务里找不到自己的 MySQL ,于是就想用命令行窗口去运行. ①.在开始里,键入 cmd ,打开命令行窗口. ②.输入:mysql -u root -p 回车,这时会提示请输入密 ...

  3. PHP各版本之间差异

    PHP5.3 __toString 魔术方法不再接受参数. 魔术方法 __get, __set, __isset, __unset, and __call 应该总是公共的(public)且不能是静态的 ...

  4. Javascript 精髓整理篇之二(函数篇)postby:http://zhutty.cnblogs.com

    今天总结的内容是javascript的function, 涉及到function顺便讲讲this. Function 是javascript的函数,也是js的执行单元.函数是JavaScript的一种 ...

  5. java反射--注解的定义与运用以及权限拦截

    自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...

  6. resin config 中文(resin.xml)

    <!-- - Resin 3.1 配置文件. --> <resin xmlns="http://caucho.com/ns/resin" xmlns:resin= ...

  7. .NET基本权限管理框架源代码

    有兴趣的朋友欢迎加群讨论:312677516 1.菜单导航管理 2.操作按钮 3.角色管理 4.部门管理 5.用户管理(用户权限) 6.用户组管理(设置成员,用户组权限) 7.系统配置(动态配置系统参 ...

  8. 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义

    干web当然,需要做的事情时,项目管理登录身份验证及其他权利.假设我们必须使用相应的登陆,未经允许是不可能的. 因此,我们需要使用拦截器,拦截功能struts2它集成.当然,有可能在Spring正在使 ...

  9. USB描述符解析-->枚举.

    枚举可以理解为主机按不定的顺序向USB设备讨要设备信息,好给它分配资源,若枚举不成功,就放弃分配资源,免得浪费资源.一般都是使用中断传输方式通信. 常用的描述符有以下几种:01H.设备描述符  02H ...

  10. Solr集成IK中文分词器

    1.将IKAnalyzer-2012-4x.jar拷贝到example\solr-webapp\webapp\WEB-INF\lib下: 2.在schema.xml文件中添加fieldType: &l ...