使用HttpClient时如何解决302错误?

赛德

我创建了一个自定义DNN模块,该模块使用HTTPClient将信息发送到外部API。我的HttpClient方法如下:

public static async Task<string> CreatePayerResponse()
    {
        var credentials = GetCredentials();
        var objEventLog = new EventLogController();
        var gatewaySettings = new GatewaySetting_ProPay();
        SignupResult_ProPay result = new SignupResult_ProPay();
        using (HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())))
        {
            HttpRequestMessage request = new HttpRequestMessage();
            HttpResponseMessage response = new HttpResponseMessage();
            response.EnsureSuccessStatusCode();
            client.BaseAddress = new Uri("https://xmltestapi.propay.com/ProPayAPI/signup");
            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            string responseBody;
            GatewaySetting_ProPay gatewaySetting = new GatewaySetting_ProPay();
            SignupRequest payerRequest = new SignupRequest();
            HttpContent content = new StringContent(payerRequest.ToString());
            try
            {
                request.Headers.Add("Authorization", credentials);
                request.Headers.Add("accept", "application/json");
                response = await client.PutAsync("https://xmltestapi.propay.com/ProPayAPI/signup", content);
                responseBody = await response.Content.ReadAsStringAsync();
                objEventLog.AddLog("Merchant Onboarding Request Sent", portalSettings, userId,
                    response.ToString(), EventLogController.EventLogType.ADMIN_ALERT);
                Console.WriteLine(responseBody);

            }
            catch (HttpRequestException ex)
            {
                result.Succeeded = false;
                result.Status = ex.Message;
                objEventLog.AddLog("Merchant Onboarding Error!", portalSettings, userId, response.ToString(),
                    EventLogController.EventLogType.ADMIN_ALERT);
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", ex.Message);
            }

            return response.Content.ToString();
        }
    }
public static string GetCredentials()
    {
        GatewaySetting_ProPay gatewaySettings = new GatewaySetting_ProPay();
        var billerAccountId = "mycreds";
        var authToken = "mycreds";
        var encodedCredentials =
            Convert.ToBase64String(Encoding.Default.GetBytes(billerAccountId + ":" + authToken));
        var credentials = string.Format("Basic {0}", encodedCredentials);
        return credentials;
    } 

当我将此方法关联到click事件时,将收到HTTP 302响应,并且没有任何内容发送到API。需要进行哪些修改以确保正确传输?

更新我仍然收到以下响应:

Error code 302 was received from server response.

尽管实现了该AllowAutoRedirect属性并将其设置为true。这是我编写的LoggingHandler类:

public LoggingHandler(HttpMessageHandler innerHandler) : base(innerHandler)
    {

    }
    protected async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken, HttpClientHandler handler)
    {
        Console.WriteLine("Request:");
        Console.WriteLine(request.ToString());
        if (request.Content != null)
        {
            Console.WriteLine(await request.Content.ReadAsStringAsync());
        }
        Console.WriteLine();
        handler.AllowAutoRedirect = true;
        HttpResponseMessage response = await base.SendAsync(request, cancellationToken);


        Console.WriteLine("Response:");
        Console.WriteLine(response.ToString());
        if (response.Content != null)
        {
            Console.WriteLine(await response.Content.ReadAsStringAsync());
        }
        Console.WriteLine();

        return response;
    }

这是实现HttpClientHandler和相关属性的正确方法吗?

赛德

在为System.Net.Http和相关名称空间实现跟踪日志后,日志指出强制关闭了连接。经过进一步的研究,事实证明.NET Framework 4.5与更现代的传输层安全性(TLS)版本不兼容。因此,必须放弃从DNN应用程序调用API的方法,因为我们要扩展的源代码针对.NET Framework 4.5版。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用验证时如何解决错误?

使用React时如何解决400错误请求错误?

在python中使用熊猫时如何解决“属性错误”

使用 BeautifulSoup 请求时如何解决超时错误?

使用solvePnP时如何解决断言错误?

使用Boilerpipe时如何解决ConnectException错误?

使用Postman时如何解决nodejs中的CORS错误?

使用beautifulsoup时如何解决属性错误?

如何解决错误:使用nodejs时监听EADDRINUSE?

使用 RAdam 优化器时如何解决类型错误?

App Gradle,使用Firebase Core时如何解决错误?

我在使用float函数时遇到错误,如何解决?

使用OMDB API时如何解决401错误?

使用 case_when 时如何解决此错误?

安装NetBeans时如何解决错误?

更新记录时如何解决错误?

使用tornado.httpclient.AsyncHTTPClient时如何解决“ RuntimeWarning:启用tracemalloc以获取对象分配回溯”?

如何解决 Android Studio 中的 HttpClient 错误

使用 RecyclerView 时如何解决 NullPointerException?

使用 JMapViewer 时如何解决 ClassNotFoundException

使用Git时如何解决“错误:索引错误–致命:索引文件损坏”

如何解决错误?

使用Kotlin时如何解决IDEA中接口使用中的@JvmStatic错误?

使用Tkinter时如何解决Base64映像错误

在Umbraco 7.1.8中使用SurfaceController时如何解决无路由错误?

创建使用try运算符的闭包时,如何解决错误“需要类型注释”?

使用 node child_process.exec 执行 top 命令时如何解决错误?

使用mitmweb时,如何解决Firefox中的“您的连接不安全”错误?

使用“ --experimental-modules”进行编译时,如何解决“ ReferenceError:未定义require”错误?