在C#的MVC RestAPI中,可以通过以下步骤将列表作为URL中的参数发送:
[HttpGet]
public IActionResult GetListData(List<string> items)
{
// 处理接收到的列表参数
// ...
return Ok();
}
[FromQuery]
特性将列表参数绑定到URL中的查询字符串。在Startup.cs
文件中的ConfigureServices
方法中添加以下代码:services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new ListModelBinderProvider());
});
ListModelBinderProvider
类,用于绑定列表参数。在项目中添加一个新的类文件,命名为ListModelBinderProvider.cs
,并添加以下代码:using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class ListModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (context.Metadata.IsEnumerableType && !context.Metadata.IsComplexType)
{
var elementType = context.Metadata.ModelType.GetGenericArguments().FirstOrDefault();
var binderType = typeof(ListModelBinder<>).MakeGenericType(elementType);
return (IModelBinder)Activator.CreateInstance(binderType);
}
return null;
}
}
ListModelBinder
类,用于绑定列表参数的值。在项目中添加一个新的类文件,命名为ListModelBinder.cs
,并添加以下代码:using Microsoft.AspNetCore.Mvc.ModelBinding;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
public class ListModelBinder<T> : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var modelName = bindingContext.ModelName;
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult == ValueProviderResult.None)
{
return Task.CompletedTask;
}
var values = valueProviderResult.Values;
if (values.Count == 0)
{
return Task.CompletedTask;
}
var result = new List<T>();
foreach (var value in values)
{
if (typeof(T) == typeof(string))
{
result.Add((T)Convert.ChangeType(value, typeof(T)));
}
else
{
// 如果需要其他类型的转换,请根据实际情况进行处理
// result.Add((T)Convert.ChangeType(value, typeof(T)));
}
}
bindingContext.Result = ModelBindingResult.Success(result);
return Task.CompletedTask;
}
}
[FromQuery]
特性将列表参数绑定到URL中的查询字符串。例如:[HttpGet]
public IActionResult GetListData([FromQuery] List<string> items)
{
// 处理接收到的列表参数
// ...
return Ok();
}
这样,你就可以在MVC RestAPI中使用C#发送列表作为URL中的参数了。
领取专属 10元无门槛券
手把手带您无忧上云