.NET WebApi中的Server.Transfer / Redirection

时间:2017-06-15 16:38:06

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

我们公司有一个内部API(.NET WebApi),可以为我们的许多应用程序提供服务。现在,我们将在外面托管一个应用程序,并决定不打开我们的主服务器到互联网。

相反,他们将在我们的防火墙中正确设置的分离服务器中创建一个包装器,并且可以访问我们的网络。

问题是:我们希望这个包装器API尽可能简单,并且基本上将请求重定向到我们的内部API。

这样的事情:

[HttpGet]
[Route("api/PDF/{orderid}")]
public IHttpActionResult GetOrderPDF(string orderid, bool showpictures = false, string disposition = "attachment")
{
    string url = "http://MYINTERNALSERVER/api/PDF/" + orderid;
    System.Uri uri = new System.Uri(url);
    return Redirect(uri); //Server.Transfer ?
}

使用此方法的问题是我的外部客户端将尝试访问我们的内部服务器,当然,将无法访问。

我们想要一个包装器,所以我们只公开我们想要的方法。

我读到了有关IIS重定向的信息,但如果我重定向所有请求,我几乎都会将所有方法暴露给互联网。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

第一次需要执行POST请求时,这种方法将会崩溃,因为您无法重定向POST操作。

您不需要全新的应用程序。您需要的是互联网公开可用的反向代理(考虑NGINX)。它可以将防火墙上的流量代理到为WebAPI提供服务的任何内容。

这里的好处是:

  • 如果外部流量存在问题(黑客攻击),您可以在不影响内部流量的情况下禁用反向代理
  • 如果您采用当前方法,或尝试编写自己的代理,则需要在WebAPI合同更改时进行修改。您不需要使用反向代理执行此操作,因为代理的设计主要对其所服务的HTTP流量透明。
  • 无需编写代码。