【问题标题】:Web Api POST Request: 401 UnauthorizedWeb Api POST 请求:401 未经授权
【发布时间】:2014-11-10 22:05:18
【问题描述】:

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

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

最好的问候

【问题讨论】:

  • 出了什么问题,您是如何解决的?

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


【解决方案1】:

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

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

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

您的 API 的安全性如何?它曾经在这 4 台服务器中的一台上运行过吗?

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2016-10-24
      • 2021-04-07
      相关资源
      最近更新 更多