【问题标题】:Converting vb function to c# in winform app在winform应用程序中将vb函数转换为c#
【发布时间】:2018-10-07 10:19:42
【问题描述】:

我正在尝试将以前编写的 .net winform 应用程序从 vb 转换为 c#,但在使用网络发送功能时遇到了问题。如何将其转换为 c#?

Public Shared Function Send(p_ipAddress As String, p_action As String, p_page As String, p_body As String, p_filePath As String) As String

        Dim objHttp = CreateObject("MSXML2.ServerXMLHTTP")
        'objHttp.setTimeouts(1000, 1000, 1000, 1000)  '-- Timeout

        objHttp.Open(p_action, sUrl, False)

        If t_fileContent.Length > 0 Then
            objHttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=" & t_multipart_boundary)
        Else
            t_fileContent.Append(p_body)
            objHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        End If

        objHttp.Send(t_fileContent.ToString())

        If objHttp.Status = 200 Then
            Return objHttp.responseText
        End If

        Return ""

    End Function

HTTP 对象是我在翻译成 c# 时遇到的问题。我不知道我是否需要使用 http 客户端、http web 请求,我对 web 调用还很陌生。

编辑我已将代码缩短为我不确定的具体内容,删除了绒毛。

【问题讨论】:

  • 我会考虑将其保留在 vb 中,但将代码移动到可以从 c# 引用的库项目中。
  • 你只需要var objHttp = Microsoft.VisualBasic.Interaction.CreateObject("MSXML2.ServerXMLHTTP");吗?
  • Microsoft.VisualBasic.dll
  • 但是有适当的 .NET 类可以处理通过 HTTP 的发送。用这些重写会更好。

标签: c# .net vb.net winforms


【解决方案1】:

试试这个:

public static string Send(string p_ipAddress, string p_action, string p_page, string p_body, string p_filePath)
{
    dynamic objHttp = Microsoft.VisualBasic.Interaction.CreateObject("MSXML2.ServerXMLHTTP");
    // objHttp.setTimeouts(1000, 1000, 1000, 1000)  '-- Timeout

    objHttp.Open(p_action, sUrl, false);

    if (t_fileContent.Length > 0)
        objHttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + t_multipart_boundary);
    else
    {
        t_fileContent.Append(p_body);
        objHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }

    objHttp.Send(t_fileContent.ToString());

    if (objHttp.Status == 200)
        return objHttp.responseText;

    return "";
}

您必须添加对Microsoft.VisualBasic.dll 的引用。

但是有适当的 .NET 类可以处理通过 HTTP 的发送。最好用那些重写。

【讨论】:

  • 问题是 objHttp 没有“Open”、“setRequestHeader”、“Send”、“Status”或“responseText”的方法。请参阅我的编辑中的屏幕截图。
  • @DrewJackson - 试试dynamic
  • 而且,为了记录,我更愿意使用适当的 c# .net 类重写,我只是不熟悉它。
【解决方案2】:

您不必使用 Microsoft.VisualBasic.dll - 有一种“核心”.NET 方式可以做到这一点:

public static string Send(string p_ipAddress, string p_action, string p_page, string p_body, string p_filePath)
{
    dynamic objHttp = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("MSXML2.ServerXMLHTTP"));

    objHttp.Open(p_action, sUrl, false);

    if (t_fileContent.Length > 0)
        objHttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + t_multipart_boundary);
    else
    {
        t_fileContent.Append(p_body);
        objHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }

    objHttp.Send(t_fileContent.ToString());

    if (objHttp.Status == 200)
        return objHttp.responseText;

    return "";
}

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 2021-07-11
    • 1970-01-01
    • 2018-08-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多