微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将IEnumerable <T>传递给Blazor WASM中的API方法

如何解决将IEnumerable <T>传递给Blazor WASM中的API方法

请问如何在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}");

测试结果

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。