码迷,mamicode.com
首页 > Windows程序 > 详细

WebApi2官网学习记录---Media Formatters

时间:2015-04-22 17:33:40      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

Web API内建支持XML、JSON、BSON、和form-urlencoded的MiME type。

创建的自定义MIME类型要继承一下类中的一个:

自定义一个MIME类型,如下: 

  public class ProductCsvFormatter:BufferedMediaTypeFormatter
    {
        public ProductCsvFormatter()
        {
            //媒体类型
            SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
            //支持的字符集
            SupportedEncodings.Add(Encoding.GetEncoding("iso-8859-1"));
            SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier:false));
            
        }
        //指示哪种类型 格式化器可以进行序列化,
        public override bool CanWriteType(Type type)
        {//支持序列化翻个Product对象和Product对象集合
            if (type == typeof(Product))
                return true;
            else
            {
                Type enumerableType = typeof(IEnumerable<Product>);
                return enumerableType.IsAssignableFrom(type);
            }
        }
        //指示哪个对象可以被反序列化
        public override bool CanReadType(Type type)
        {//目前不需要反序列化 所以返回false
            return false;
        }
        //序列化对象并写入流,如果支持反序列化还需要重载ReadFromStream方法
        public override void WriteToStream(Type type, object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content)
        {
            Encoding effectiveEncoding = SelectCharacterEncoding(content.Headers);
            using (var writer = new StreamWriter(writeStream, effectiveEncoding))
            {
                var products = value as IEnumerable<Product>;
                if (products != null)
                {
                    foreach (var product in products)
                    {
                        WriteItem(product, writer);
                    }
                }
                else
                {
                    var singleProduct = value as Product;
                    if (singleProduct == null)
                        throw new InvalidOperationException("Cannot serialize type");
                    WriteItem(singleProduct, writer);
                }
            }
        }
        private void WriteItem(Product product, StreamWriter writer)
        {
            writer.WriteLine("{0},{1},{2},{3}", Escape(product.Id),
        Escape(product.Name), Escape(product.Category), Escape(product.Price));
        }

        static char[] _specialChars = new char[] { ,, \n, \r, " };
        private string Escape(object o)
        {
            if (o == null)
                return "";
            string field = o.ToString();
            if (field.IndexOfAny(_specialChars) != -1)
            {
                return String.Format("\"{0}\"", field.Replace("\"", "\"\""));
            }
            else
                return field;

        }
    }

 
 public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            //添加自定义的MIME类型
            config.Formatters.Add(new ProductCsvFormatter());
        }

模拟请求如图:请求时要指定Content-Type

技术分享

技术分享

WebApi2官网学习记录---Media Formatters

标签:

原文地址:http://www.cnblogs.com/goodlucklzq/p/4447912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!