首页 > 解决方案 > HttpRequestMessage 总是会产生一个 GET 方法

问题描述

目前我正在为 NopCommerce 构建一个发货插件。在这种特殊情况下,我必须使用目标客户端 Rest API 进行身份验证。为此,我创建了一个(测试)身份验证方法。

仅供参考:端点与 Postman 一起工作正常。例如,也更改为 PUT/Delete。也可以正常工作。只有 POST 方法被更改为 GET。总是!

此外,以下 StackOverflow 问题似乎是我目前遇到的问题,但不是解决方案。

httpClient.PostAsync() 无论如何都会执行 GET 请求

方法:

public async Task<string> PostHttpReqMessageAsync()
    {
        DHLApiRequestModel model = new DHLApiRequestModel()
        {
            UserId = _dhlSettings.UserID,
            Key = _dhlSettings.Key,
            AccountNumber = new List<string>()
            {
                _dhlSettings.AccountNumber
            }
        };

        string requestMessage = JsonConvert.SerializeObject(model);
        HttpContent content = new StringContent(requestMessage, Encoding.UTF8, "application/json");
        HttpRequestMessage httpReqMessage = new HttpRequestMessage(HttpMethod.Post, "authenticate/api-key")
        {
            Method = HttpMethod.Post,
            Content = content
        };

        try
        {
            HttpResponseMessage httpResponseMessage = await _httpClient.SendAsync(httpReqMessage);
            if (httpResponseMessage.StatusCode == System.Net.HttpStatusCode.OK)
                return await httpResponseMessage.Content.ReadAsStringAsync();
        }
        catch (Exception ex)
        {
            return ex.Message;
        }

        return null;
    }

调试时的结果:方法:GET,RequestUri:'http://api-dp.nl/authenticate/api-key',版本:1.1,内容:,标题:

标签: c#apiposthttpclientnopcommerce

解决方案


感谢canton7我有一个解决方案/修复。问题和解决方案都很奇怪,但现在似乎有效。

PostHttpReqMessageAsync()实际 HttpClient的方法是由 Parent 方法触发的,而 Parent 方法又是由 NopCommerce 本机方法GetShippingOptionResponse()触发的。GetShippingOptions()

所以我而不是:

return _dhlService.GetShippingOptionResponse(getShippingOptionRequest);

我做了:

var options = _dhlService.GetShippingOptionResponse(getShippingOptionRequest);
return options;

似乎现在可以工作

实际问题?可能是 301。我在做 POST 方法,而 NopCommerce 正在做 GET 方法。我猜这导致我重定向。


推荐阅读