【问题标题】:Get & Post in ASP.NET Blazor在 ASP.NET Blazor 中获取和发布
【发布时间】:2018-12-27 11:49:38
【问题描述】:

借助互联网上的一些示例,我能够开发一个 ASP.NET Core 托管 Blazor 应用程序。

但是在调用 api 时如下

 private async Task Refresh()
{
    li.Clear();
    li = await Http.GetJsonAsync<SampleModel[]>("/api/Sample/GetList");
    StateHasChanged();
}

private async Task Save()
{  
   await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);     
   await Refresh();
}

在下面一行:

await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);     

如何查看这个 HTTP 调用的状态码?

如果 API 调用出现任何问题,我想显示一条消息。

但是当我这样做时:

 HttpResponseMessage resp = await Http.SendJsonAsync(HttpMethod.Post, "api/Sample/Add", obj);

然后它说:

不能将 void 转换为 HttpResponse 消息

我正在使用以下方法:

GetJsonAsync() // For HttpGet
SendJsonAsync() // For HttpPost And Put
DeleteAsync() // For HttpDelete  

这里如何验证状态码?

【问题讨论】:

    标签: c# asp.net-core-webapi asp.net-core-2.1 blazor blazor-server-side


    【解决方案1】:

    问题是您正在使用 blazor 的 HttpClientJsonExtensions 扩展,

    内部通常调用

    public static Task SendJsonAsync(this HttpClient httpClient, HttpMethod method, string requestUri, object content)
        => httpClient.SendJsonAsync<IgnoreResponse>(method, requestUri, content);
    
    public static async Task<T> SendJsonAsync<T>(this HttpClient httpClient, HttpMethod method, string requestUri, object content)
    {
        var requestJson = JsonUtil.Serialize(content);
        var response = await httpClient.SendAsync(new HttpRequestMessage(method, requestUri)
        {
            Content = new StringContent(requestJson, Encoding.UTF8, "application/json")
        });
    
        if (typeof(T) == typeof(IgnoreResponse))
        {
            return default;
        }
        else
        {
            var responseJson = await response.Content.ReadAsStringAsync();
            return JsonUtil.Deserialize<T>(responseJson);
        }
    }
    

    GET 请求在内部使用HttpContext.GetStringAsync

    public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)
    {
        var responseJson = await httpClient.GetStringAsync(requestUri);
        return JsonUtil.Deserialize<T>(responseJson);
    }
    

    虽然普通的HttpClient API 仍然存在并且可以像在那些扩展方法中一样使用。

    这些扩展方法只是简单地包装了默认的HttpClient 调用。

    如果您希望访问响应状态,则需要编写自己的包装器来公开所需的功能,或者只使用默认 API

    【讨论】:

    • 就像备注一样,帖子中的链接不再起作用。当前地址是:github.com/dotnet/blazor/blob/0.1.0/src/… 此外,Blazor 已移至 ASP.NET Core 存储库。
    • @MaciejKlemarczyk 感谢您的更新。我已使用您提供的链接来修复帖子中损坏的链接。
    【解决方案2】:

    试试这个:

     var response = await Http.SendJsonAsync <HttpResponseMessage>(HttpMethod.Post, "api/Sample/Add", obj);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多