標籤:
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); }
Asp.net Web Api 資料繫結