鉴于控制器:
public class MyController : ApiController
{
public MyResponse Get([FromUri] MyRequest request)
{
// do stuff
}
}
模特:
public class MyRequest
{
public Coordinate Point { get; set; }
// other properties
}
public class Coordinate
{
public decimal X { get; set; }
public decimal Y { get; set; }
}
API网址:
/api/my?Point=50.71,4.52
我希望类型Point
的{{1}}属性在到达控制器之前从查询字符串值Coordinate
转换。
我可以在哪里加入WebAPI以实现它?
答案 0 :(得分:3)
我用模型绑定器做了类似的事情。 请参阅this article的选项#3。
您的模型绑定器将是这样的:
public class MyRequestModelBinder : IModelBinder {
public bool BindModel(HttpActionContext actionContext,
ModelBindingContext bindingContext) {
var key = "Point";
var val = bindingContext.ValueProvider.GetValue(key);
if (val != null) {
var s = val.AttemptedValue as string;
if (s != null) {
var points = s.Split(',');
bindingContext.Model = new Models.MyRequest {
Point = new Models.Coordinate {
X = Convert.ToDecimal(points[0],
CultureInfo.InvariantCulture),
Y = Convert.ToDecimal(points[1],
CultureInfo.InvariantCulture)
}
};
return true;
}
}
return false;
}
}
然后,您必须将其连接到动作中的模型绑定系统中:
public class MyController : ApiController
{
// GET api/values
public MyRequest Get([FromUri(BinderType=typeof(MyRequestModelBinder))] MyRequest request)
{
return request;
}
}