WebAPI:自定义参数映射
本文关键字:映射 参数 自定义 WebAPI | 更新日期: 2023-09-27 18:27:17
给定控制器:
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
我希望在到达控制器之前,从查询字符串值50.71,4.52
转换类型Coordinate
的Point
属性。
我在哪里可以挂接WebAPI以实现它?
我用模型绑定器做了类似的事情。请参阅本文的选项#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;
}
}