Есть ли способ запросить сервер на другом порту, отличном от 80, с помощью класса WebRequest? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь получить токен носителя с сервера идентификации с помощью класса WebRequest, поскольку программа должна работать с .NET 2.0, а порт, из которого я получаю токен, - 10000.

Я пытался создать WebRequest, как

  • identityURL: 10000 / getToken
  • http://identityURL:10000/getToken

но ни один не работает. Первая возвращает ошибку «Unkown URL Prefix», а вторая - ошибку «400 Bad Request».

Есть ли другой способ получить токен под .NET 2.0?

Большое спасибо заранее за вашу помощь.

-Simon

Edit:

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, но это привело к следующей ошибке: «Возникла исключительная ситуация во время запроса WebClient.»

решено (см. Ниже)

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Спасибо за вашу помощь, но я решил ее сам, используя WebClient вместо WebRequest.Вот как я это сделал:

Код немного отличается от приведенного выше.Исключение, которое я получил с WebClient, произошло из-за проблемы с одним из установленных HTTP-заголовков.

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
0 голосов
/ 08 июля 2019

Я искал по интернету, и похоже, что следующее работает.Я еще не пробовал, но нашел следующую ссылку на код на нескольких веб-сайтах.

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();

}

Это взято из здесь .Попробуйте изменить номер порта в строке 3.

...