【问题标题】:How to call an API on one server from a User-interface (Webpage) on a different server?如何从另一台服务器上的用户界面(网页)调用一台服务器上的 API?
【发布时间】:2014-08-03 05:42:11
【问题描述】:

我想将我的 API(它基本上查询 Azure 表并返回代表 Azure 表中的条目的对象)与在按钮单击时调用 API 的网页分开。基本上,我希望这两件事在不同的服务器上。我没有任何经验这样做,知道如何处理这个吗?我在这里的某个地方在概念上是错误的吗?

举个例子,说API在服务器“foreignserver”有一个函数:

public string double(string x)
{
    return x + x + ".";
}

我想从我的本地主机上调用这个函数,点击一个 asp.net 页面按钮:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

代码隐藏:

protected void Button1_Click(object sender, EventArgs e)
{ 
   string y = //Connect to other server and call API? ;
}

澄清一下,我基本上是在尝试将前端与 API 分离,方法是将每个前端放在单独的服务器上。

【问题讨论】:

  • 要调用的 API(在 foreignserver 上)是什么?网络API? WCF?自定义?
  • 它是一个基于 REST 的 API,它基本上具有从 Azure 存储表返回值的 get 函数。

标签: c# javascript html asp.net web


【解决方案1】:

试试类似的东西:

protected void Button1_Click(object sender, EventArgs e)
{ 
   string y = new WebClient.DownloadString("http://example.com/api/Double?x=5");
}

显然,您需要使用正确的地址。

【讨论】:

    【解决方案2】:

    我基本上是在尝试通过将前端与 API 分别放在不同的服务器上来分离它们

    对我来说似乎是一个合理的概念,有很多理由说明这是一个好主意,比如您打算开放 API 以供公众使用或在多个站点之间共享它。

    为了做你正在做的事情,你只需要从你的网站向你的 API 发出一个网络请求,例如

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (var request = WebRequest.Create("http://foreignserver/api/..."))
        using (var response = request.GetResponse())
        using (var reader = new StreamReader(response.GetResponseStream())
        {
            string y = reader.ReadToEnd();
            ...
        }
    }
    

    【讨论】:

    • 我提供的示例中的“/...”是什么?我可以直接调用该函数并获取它返回的字符串吗?
    • @SKLAK /... 将是您的 API 调用的路径。如果您还没有 API 或不知道如何构建 API,我建议您使用 MVC Web API
    • 可以将视图分离到 MVC Web API 的差异服务器吗?
    • 谢谢.. 我刚刚调整了我的 API 以作为 MVC Web API 工作,到目前为止一切顺利,我可以从不同的主机调用它。 :)
    猜你喜欢
    • 2011-08-23
    • 2017-01-23
    • 1970-01-01
    • 2021-11-04
    • 2018-01-20
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多