2017-06-15 69 views
1

我们公司有一个内部API(.NET WebApi),可以为我们的许多应用程序提供服务。现在,我们将在外部托管一个应用程序,并且决定不要将我们的主服务器打开到互联网。.NET中的Server.Transfer /重定向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重定向,但如果我重定向所有请求,我几乎所有的方法都暴露给互联网。

有什么建议吗?

回答

3

您第一次需要执行POST请求时,由于您无法重定向POST操作,因此此方法将崩溃。

你不需要一个全新的应用程序。你需要的是一个反向代理(考虑NGINX),这是公开可用的互联网。它可以将通过防火墙的流量代理到正在提供WebAPI的任何服务器上。

在这里的好处是:

  • 如果没有与外界交通(黑客)的问题,您可以禁用反向代理服务器,而不会干扰内部交通
  • 如果采取目前的做法,或尝试要编写自己的代理,每当WebAPI合同发生变化时,您都需要修改它。您不需要使用反向代理来执行此操作,因为代理设计为对其所服务的HTTP流量而言基本上是透明的。
  • 无法编写代码。
+0

这是一个Windows服务器,所以NGINX不会工作。但是,您引导我走向正确的道路,并在IIS上安装并设置了URL重写器。工作得很好! – Catinodeh