Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC HTTPGET操作:数组参数_Asp.net Mvc - Fatal编程技术网

Asp.net mvc ASP.NET MVC HTTPGET操作:数组参数

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可以,但我需要解决第一种情况 请帮忙 很抱歉,我的英语不好。您

如何解决这个案子

请求:[纬度]=123和地理点[0][经度]=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) 
{ 
   //... 
}