问题描述
请问如何在Blazor WASM项目中使用Http.GetFromJsonAsync传递IEnumerable参数? 这是我在剃须刀组件中的代码:
IEnumerable<WAGPiattValidePerUtente> piattValidePerUtente;
dipendenti = await Http.GetFromJsonAsync<IEnumerable<WAGDipendentiAttivitaNGiorniPrec>>($"WAGDipendentiAttivitaNGiorniPrecService/ByDaySottrDataPiattaforme/{(short)7}/{dataRif.ToString("yyyyMMdd")}/{piattValidePerUtente}");
在我的API控制器中,代码为:
[HttpGet("ByDaySottrDataPiattaforme/{giorniDaSottrarre}/{dataRif}/{piattaforme}")]
public async Task<ActionResult<IEnumerable<WAGDipendentiAttivitaNGiorniPrec>>> GetWAGDipendentiPiattAttivitaNGiorniPrec(short giorniDaSottrarre,string dataRif,IEnumerable<WAGDipendentiAttivitaNGiorniPrec> piattaforme)
{
//call a store procedure...
}
调用该方法时,出现此错误: 加载资源失败:服务器响应状态为415() 不支持的媒体类型
有人可以帮我吗?
解决方法
如何在Blazor WASM项目中使用Http.GetFromJsonAsync传递IEnumerable参数?
无法加载资源:服务器的响应状态为415()不支持的媒体类型
通常,我们使用路由数据和查询字符串值来传递简单类型数据。
要满足通过路由数据将IEnumerable参数传递给操作方法的要求,可以尝试实现和使用自定义模型绑定程序,如下所示。
public class MyModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
// ...
// implement it based on your actual requirement
// code logic here
// ...
var model = new List<WAGPiattValidePerUtente>();
if (bindingContext.ValueProvider.GetValue("piattaforme").FirstOrDefault() != null)
{
model = JsonSerializer.Deserialize<List<WAGPiattValidePerUtente>>(bindingContext.ValueProvider.GetValue("piattaforme").FirstOrDefault());
}
bindingContext.Result = ModelBindingResult.Success(model);
return Task.CompletedTask;
}
}
将其应用于操作参数
[HttpGet("ByDaySottrDataPiattaforme/{giorniDaSottrarre}/{dataRif}/{piattaforme}")]
public async Task<ActionResult<IEnumerable<WAGDipendentiAttivitaNGiorniPrec>>> GetWAGDipendentiPiattAttivitaNGiorniPrec(short giorniDaSottrarre,string dataRif,[ModelBinder(BinderType = typeof(MyModelBinder))]
IEnumerable<WAGPiattValidePerUtente> piattaforme)
{
//call a store procedure...
从客户端应用发出请求
var piattValidePerUtente_data = Uri.EscapeDataString(JsonSerializer.Serialize(piattValidePerUtente));
dipendenti = await Http.GetFromJsonAsync<IEnumerable<WAGDipendentiAttivitaNGiorniPrec>>($"WAGDipendentiAttivitaNGiorniPrecService/ByDaySottrDataPiattaforme/{(short)7}/{dataRif.ToString("yyyyMMdd")}/{piattValidePerUtente_data}");
测试结果