POST-запрос Web Api: 401 не авторизован

1

У меня есть приложение Web Api, распространяемое на других серверах.

Моя ситуация такова:

                                     ---------------------
                                     -   LOAD BALANCER   -
                                     ---------------------


        -----------             -------------        -------------        --------------
          SERVER 1                 SERVER 2             SERVER 3             SERVER 4
        -----------             -------------        -------------        --------------

У меня есть список серверов ip. Выполняется основной вызов:

http://webapidefault/mywebapi/v01/method

Этот URL-адрес делает балансировку нагрузки выбором сервера на том, что запрос должен быть выполнен. Я бы хотел выполнить эту операцию на всех серверах.

Я думаю, чтобы использовать IP-адреса серверов для составления запроса POST, и когда главный вызов получен одним из серверов, сам сервер вызывает остальных:

http://serverIP/mywebapi/v01/method

Когда я запускаю запрос, он возвращает ошибку 401 unauthorize.

Как я могу решить ситуацию?

Код, который я запускаю, следующий:

[Route("methodtoperformonallservers")]
[HttpPost]
public ResponseMessageResult PerformAllServers()
{
  var result = MyHelper.PerformAll();

  if(result != -1)
  {
      return WebHelper.CreateResponseMessageResult(HttpStatusCode.OK, result);
  }
  else
  {
      return WebHelper.CreateResponseMessageResult(HttpStatusCode.InternalServerError, result);
  } 
}

Мой помощник выполнит:

public static int PerformAll()
{
   foreach( var serverIP in serverList)
   {
      var reqStr = http://serverIP/mywebapi/v01/methodtoperformonspecificserver;
      var reqUri = new Uri(reqStr);
      var myrequest = (HttpWebRequest)WebRequest.Create(reqUri);
      myrequest.Method = "POST";
      myrequest.ContentLenght = 0;

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

Когда вызов GetResponse называется, он выдает исключение 401.

Как я могу решить свою ситуацию? Заранее спасибо.

С наилучшими пожеланиями

  • 0
    В чем заключалась проблема и как вы ее обошли?
Теги:
asp.net-web-api

2 ответа

0

Мне непонятно, почему вы хотите/должны выполнить этот метод на всех 4 серверах. Балансировщик нагрузки обычно полезен, когда вы хотите распространять нагрузку на несколько серверов и не выполнять процесс на всех серверах.

Если это для каких-то работ по обслуживанию, я бы предложил реализовать логику в клиенте, а не в вашем API.

Во всяком случае, я не думаю, что ошибка, которую вы получаете (http-ошибка 401), не имеет никакого отношения к выполнению вашего метода. Это связано с тем, что ваш запрос не аутентифицирован, и API ожидает некоторые учетные данные.

Как ваш API защищен? Он когда-либо работал на одном из этих 4 серверов?

0

С помощью дополнения Firefox Headertool вы можете добавить строку Authorize в заголовках HTTP, чтобы исправить ошибку неавторизованного доступа.

С помощью Fiddler вы можете отслеживать и отлаживать сообщения HTTP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню