zoukankan      html  css  js  c++  java
  • Asp.net Web Api 数据绑定

    1、假设有如下api,传入经纬度获取城市信息,api可以定义为api/geodata?latitude=47.678558&Longitude=-122.130989 下面我来尝试将经纬度信息作为一个参数进行提交。

    api/geodata?location=47.678558,-122.130989

    首先,我们肯定想到可以在api中获取location再去对location进行解析,这种方法不推荐,下面我们尝试另外一种方法直接变量接收。

    [TypeConverter(typeof(GeoPointConverter))]//标记类型转换器
        public class GeoPoint
        {
            public double Latitude { get; set; }
            public double Longitude { get; set; }
    
            public static bool TryParse(string s, out GeoPoint result)
            {
                result = null;
    
                var parts = s.Split(',');
                if (parts.Length != 2)
                {
                    return false;
                }
    
                double latitude, longitude;
                if (double.TryParse(parts[0], out latitude) &&
                    double.TryParse(parts[1], out longitude))
                {
                    result = new GeoPoint() { Longitude = longitude, Latitude = latitude };
                    return true;
                }
                return false;
            }
        }
    
        //类型转换器
        class GeoPointConverter : TypeConverter
        {
            public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
            {//检查是否能够转换
                if (sourceType == typeof(string))
                {
                    return true;
                }
                return base.CanConvertFrom(context, sourceType);
            }
    
            public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
            {//进行数据类型转换
                if (value is string)
                {
                    GeoPoint point;
                    if (GeoPoint.TryParse((string)value, out point))
                    {
                        return point;
                    }
                }
                return base.ConvertFrom(context, culture, value);
            }
        }

    以上包括一个实体类和一个类型转换类,由类型转换类负责把string类型的数据转化成GeoPoint。

    Action定义如下:

            [Route("geodata")]
            public IHttpActionResult GetGeoData(GeoPoint geoPoint)
            {
                return Ok(geoPoint);
            }
  • 相关阅读:
    cf C. Vasya and Robot
    zoj 3805 Machine
    cf B. Vasya and Public Transport
    cf D. Queue
    cf C. Find Maximum
    cf B. Two Heaps
    cf C. Jeff and Rounding
    cf B. Jeff and Periods
    cf A. Jeff and Digits
    I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/CanFly/p/4312831.html
Copyright © 2011-2022 走看看