有没有一种方法可以使用 WebRequest Class 在 80 以外的其他端口上查询服务器?

Is there a method to query a server on another port than 80 with the WebRequest Class?

我正在尝试使用 WebRequest Class 从身份服务器获取不记名令牌,因为该程序必须使用 .NET 2.0,并且我从中获取令牌的端口是 10000。

我尝试像

这样创建 WebRequest

但没有一个有效。第一个 returns "Unkown URL Prefix"-错误,第二个 returns-错误,第二个

在 .NET 2.0 下是否有其他方法获取令牌?

非常感谢您的帮助。

-西蒙

编辑:

Using wc As New WebClient()
      Dim postData As String = "grant_type=" + sTokenGrantType + "&username=" + sIdentityServerClientName + "&password=" + sIdentityServerClientSecret + "&scope=Api"
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
      Dim responseArray As Byte()

      wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")
      wc.Headers.Add(HttpRequestHeader.ContentLength, byteArray.Length.ToString)
      wc.Headers.Add(HttpRequestHeader.UserAgent, "User-Agent: PostmanRuntime/7.15.0")

      wc.BaseAddress = sIdentityServerURL

      responseArray = wc.UploadData("/getToken", "POST", byteArray)

      MsgBox(responseArray)
End Using

我尝试使用 WebClient class,但这会导致以下错误:"An exception occurred during a WebClient request."

已解决(见下文)

我在互联网上搜索了一下,下面的内容似乎有效。我还没有尝试过,但我在几个网站上找到了以下代码参考。

Uri myUri = new Uri("http://{server}:{port}");
WebRequest.Create(Uri);

此外,检查 ServicePoint.BindIPEndPointDelegate 回调是否有帮助。示例代码:

public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
    Console.WriteLine("BindIPEndpoint called");
      return new IPEndPoint(IPAddress.Any,5000);

}

public static void Main()
{

    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://MyServer");

    request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

}

这摘自here。尝试更改第 3 行中的端口号。

感谢您的帮助,但我自己解决了这个问题,方法是使用 WebClient 而不是 WebRequest。我是这样做的:

该代码与上面发布的代码略有不同。我在 WebClient 中遇到的异常是由于我设置的 HTTP-Headers 之一出现问题。

Using wc As New WebClient()
      Dim postData As String = "grant_type=" + sTokenGrantType + "&client_id=" + sIdentityServerClientName + "&client_secret=" + sIdentityServerClientSecret + "&scope=Api"
      Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
      Dim responseArray As Byte()

      wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded")

      wc.BaseAddress = sIdentityServerURL

      responseArray = wc.UploadData("/getToken", "POST", byteArray)
End Using