Asp.net mvc ASP.NET MVC HTTPGET操作:数组参数
如何解决这个案子 请求:[纬度]=123和地理点[0][经度]=1 我的控制器操作:Asp.net mvc ASP.NET MVC HTTPGET操作:数组参数,asp.net-mvc,Asp.net Mvc,如何解决这个案子 请求:[纬度]=123和地理点[0][经度]=1 我的控制器操作: [HttpGet] public HttpResponseMessage Test([FromUri] List<GeoPoint> geoPoints) [HttpGet] 公共HttpResponseMessage测试([FromUri]列出地理点) 请求.Latitude=123&geoPoints[0].Longitude=1可以,但我需要解决第一种情况 请帮忙 很抱歉,我的英语不好。您
[HttpGet]
public HttpResponseMessage Test([FromUri] List<GeoPoint> geoPoints)
[HttpGet]
公共HttpResponseMessage测试([FromUri]列出地理点)
请求.Latitude=123&geoPoints[0].Longitude=1可以,但我需要解决第一种情况
请帮忙
很抱歉,我的英语不好。您可以像这样创建一个自定义的
ModelBinder
(仅供参考):
公共类GeoPointModelBinder:IModelBinder
{
public static Regex Regex=new Regex(@“^geoPoints\[\(d+)\]\[(经纬度)\]$”,RegexOptions.IgnoreCase);
public bool BindModel(HttpActionContext actionContext,ModelBindingContext bindingContext)
{
var query=actionContext.Request.RequestUri.query;
var参数=查询
.Split(新字符[]{'&},StringSplitOptions.RemoveEmptyEntries)
.Select(it=>it.Split('='))
.Where(it=>regex.IsMatch(it[0]))
.ToDictionary(it=>it[0],it=>it[1]);
变量点=参数
.Select(它=>new GeoPoint())
.ToList();
foreach(参数中的var参数)
{
var match=regex.match(parameter.Key);
var firstGroup=match.Groups[1];
var secondGroup=match.Groups[2];
int index=int.Parse(firstGroup.Value);
字符串字段=secondGroup.Value;
if(string.Equals(字段“纬度”,StringComparison.OrdinalIgnoreCase))
{
点[索引]。纬度=参数。值;
}
其他的
{
点[索引]。经度=参数。值;
}
}
bindingContext.Model=点;
返回true;
}
}
...
[HttpGet]
公共HttpResponseMessage测试([ModelBinder(typeof(GeoPointModelBinder))]列出地质点)
{
//...
}
这是什么技术?请给你的问题贴上相应的标签。我很抱歉。ASP.NET.NET framework 4.5.1除非创建自定义的ModelBinder
public class GeoPointModelBinder : IModelBinder
{
public static Regex regex = new Regex(@"^geoPoints\[\(d+)\]\[(longitude|latitude)\]$", RegexOptions.IgnoreCase);
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var query = actionContext.Request.RequestUri.Query;
var parameters = query
.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
.Select(it => it.Split('='))
.Where(it => regex.IsMatch(it[0]))
.ToDictionary(it => it[0], it => it[1]);
var points = parameters
.Select(it => new GeoPoint())
.ToList();
foreach (var parameter in parameters)
{
var match = regex.Match(parameter.Key);
var firstGroup = match.Groups[1];
var secondGroup = match.Groups[2];
int index = int.Parse(firstGroup.Value);
string field = secondGroup.Value;
if (string.Equals(field, "latitude", StringComparison.OrdinalIgnoreCase))
{
points[index].Latitude = parameter.Value;
}
else
{
points[index].Longitude = parameter.Value;
}
}
bindingContext.Model = points;
return true;
}
}
...
[HttpGet]
public HttpResponseMessage Test([ModelBinder(typeof(GeoPointModelBinder))]List<GeoPoint> geoPoints)
{
//...
}