【问题标题】:Error: CS0121 The call is ambiguous between the following methods or properties错误:CS0121 以下方法或属性之间的调用不明确
【发布时间】:2021-03-05 05:31:26
【问题描述】:

我有问题-

System.Net.Http.HttpClientExtensions.PostAsJsonAsync(System.Net.Http.HttpClient, 字符串,T,System.Threading.CancellationToken)' 和 'System.Net.Http.Json

private async Task Add()
{
    using (var msg = await Http.PostAsJsonAsync<Feedback>("/api/feedbacks", newcust, System.Threading.CancellationToken.None))
    {
        if (msg.IsSuccessStatusCode)
        {
            custs.Add(await msg.Content.ReadFromJsonAsync<Feedback>());
            newcust.title = newcust.rating = newcust.comment = null;
        }
    }

    if (ValidReCAPTCHA)
    {
        var response = await reCAPTCHAComponent.GetResponseAsync();
        try
        {
            ServerVerificatiing = true;
            StateHasChanged();
            await Http.PostAsJsonAsync("/api/sample", new SampleAPIArgs { reCAPTCHAResponse = response });
            Navigation.NavigateTo("/valid");
        }
        catch (HttpRequestException e)
        {
            await JS.InvokeAsync<object>("alert", e.Message);
            ServerVerificatiing = false;
            StateHasChanged();
        }
    }
}

Screenshoot Picture

【问题讨论】:

  • 请将代码发布为文本,而不是截图
  • 还有错误信息:请以文字形式发布。 Http 是什么类型? newcust是什么类型的?

标签: c# blazor blazor-webassembly blazor-client-side


【解决方案1】:

使用

System.Net.Http.Json.HttpClientJsonExtensions.PostAsJsonAsync

代替

System.Net.Http.HttpClientExtensions.PostAsJsonAsync

您可能需要其中一些:

using System.Net.Http.Json;
using System.Net.Http;
using System.Text.Json;
using System.Text;
using System.Text.Json.Serialization;

删除对System.Net.Http.HttpClientExtensions 的任何引用 下面是安装System.Net.Http.Json的代码,如果没有安装

Install-Package System.Net.Http.Json -Version 5.0.0

【讨论】:

  • 如果我不能删除对任何一个的引用(我使用 GetFromJsonAsync() 因为)怎么办?如何使用 HttpClient 的静态实例调用两个 PostAsJsonAsync 之一?例如HttpClientInstance.PostAsJsonAsync
  • @gawkface 这方面有什么进展,我也有同样的问题
  • @Haukland 从我在存档中找到的内容(似乎不记得从那时起所以挖了一些代码),我最终使用了 HttpClient.SendAsync() 方法(因此没有面对原始的问题不再)
  • @gawkface 我最终选择了await HttpClientJsonExtensions.PostAsJsonAsync(httpClient, rel_path, request, cancellationToken); 而不是httpClient.PostAsJsonAsync(rel_path, request, cancellationToken。如果需要,您可以使用 HttpClientExtensions 而不是 Json 版本
【解决方案2】:

方法 Http.PostAsJsonAsync 位于 2 个命名空间中 - 请查看错误消息的实际内容。

您必须更多地限定名称,以便编译器知道您要使用哪一个。否则,您必须删除有冲突的usings 之一。

就像 PMFKlaus 在他们的 cmets 中所说的那样 - 请发布代码,而不是屏幕截图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2012-02-09
    • 2020-01-19
    相关资源
    最近更新 更多