Web Api POST请求:401未经授权

时间:2014-11-09 12:00:55

标签: c# asp.net-web-api

我的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异常。

我如何解决我的情况?提前谢谢。

祝你好运

2 个答案:

答案 0 :(得分:0)

使用Firefox加载项Headertool,您可以在HTTP标头中添加Authorize行来修复未授权错误。

使用Fiddler,您可以跟踪和调试HTTP消息。

答案 1 :(得分:0)

我不清楚为什么你想/需要在所有4台服务器上执行该方法。当您希望将负载分散到多个服务器上而不是在所有服务器上执行进程时,负载均衡器通常很有用。

如果这是针对某种维护工作的,我建议在客户端而不是在API中实现逻辑。

无论如何,我不认为你得到的错误(http错误401)与你的方法执行无关。这是因为您的请求未经过身份验证,API需要一些凭据。

您的API如何安全?它有没有在这4台服务器中的一台上工作?