Web api 将整数数组传递给操作方法

2024-06-21

我有这个网络 API 方法:

[HttpGet]
[Route("WorkPlanList/{clientsId}/{date:datetime}")]
public async Task<IHttpActionResult> WorkPlanList([FromUri]List<int> clientsId, [FromUri]DateTime date)
{

}

这是我用来调用上面的操作方法的 URI:

http://localhost/blabla/api/workPlan/WorkPlanList/5,4/2016-06-01

我在弯曲的括号上设置断点,看到日期时间值完美传递,而clientsId值为0.

知道为什么我得到0 on clientsId?


You get 0 on clientsId因为框架无法绑定该值4,5在你的例子中List<int>。在这种情况下,您使用自定义模型绑定器,它将将该值解析为您想要的类型并将其绑定到您的操作参数:

[RoutePrefix("blabla/api/workplan")]
public class WorkPlanController : ApiController {

    [HttpGet]
    [Route("WorkPlanList/{clientsId}/{date:datetime}")]
    public IHttpActionResult WorkPlanList([ModelBinder(typeof(ClientsIdBinder))]List<int> clientsId, [FromUri]DateTime date) {

        var result = new { clientsId, date };

        return (Ok(result));
    }
}

public class ClientsIdBinder : IModelBinder {

    public bool BindModel(System.Web.Http.Controllers.HttpActionContext actionContext, ModelBindingContext bindingContext) {
        if (!typeof(IEnumerable<int>).IsAssignableFrom(bindingContext.ModelType)) {
            return false;
        }

        var val = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (val == null) {
            return false;
        }

        var ids = val.RawValue as string;
        if (ids == null) {
            return false;
        }

        var tokens = ids.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        if (tokens.Length > 0) {
            var clientsId = tokens.Select(s => int.Parse(s));
            if (bindingContext.ModelType.IsArray) {
                bindingContext.Model = clientsId.ToArray();
            } else {
                bindingContext.Model = clientsId.ToList();
             }
            return true;
        }

        bindingContext.ModelState.AddModelError(
            bindingContext.ModelName, "Cannot convert client ids");
        return false;
    }
}

参考:ASP.NET Web API 中的参数绑定 http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web api 将整数数组传递给操作方法 的相关文章

随机推荐