Asp.net web api RESTAPI可以在Web API服务中使用吗?

Asp.net web api RESTAPI可以在Web API服务中使用吗?,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我需要创建一个由客户端使用的Web API“包装器”,但在这个Web API服务中,我实际上需要创建一个对运行在同一IIS服务器上的不同REST API服务的POST请求,该服务执行一些工作并返回我通过JSON HttpResponse传递回客户端的StringContent。这可能吗?客户机不直接调用实际的RESTAPI并返回他们不需要/想要的数据,而是调用我的Web API服务,我只返回他们所需的数据。我知道这是在旧的SOAP WSDL模型中完成的 如果我需要客户端传入POST请求所需的两个

我需要创建一个由客户端使用的Web API“包装器”,但在这个Web API服务中,我实际上需要创建一个对运行在同一IIS服务器上的不同REST API服务的POST请求,该服务执行一些工作并返回我通过JSON HttpResponse传递回客户端的StringContent。这可能吗?客户机不直接调用实际的RESTAPI并返回他们不需要/想要的数据,而是调用我的Web API服务,我只返回他们所需的数据。我知道这是在旧的SOAP WSDL模型中完成的


如果我需要客户端传入POST请求所需的两个参数,我会让客户端使用GET还是POST请求?

这是我使用POST方法在另一个API中调用API的示例代码

  using (var client = new HttpClient())
     {
                        string query;
                        using (var content = new FormUrlEncodedContent(new Dictionary<string, string>()
                        {
                            {"username", username},
                            {"password", password}
                        }))
                        {
                            query = content.ReadAsStringAsync().Result;
                        }

                        var model = new{
                            username = txtUsername.Text,
                            password = txtPassword.Text
                        };
                        var json = JsonConvert.SerializeObject(model);
                        var user = new StringContent(json, Encoding.UTF8, "application/json");

                        using (var response = await client.PostAsync(@"http://localhost/dataagent/api/user/authenticate", user))
                        {
                            if (response.IsSuccessStatusCode)
                            {
                                var result = await response.Content.ReadAsStringAsync();
                                // handle result here

                            }
                        }
}
使用(var-client=new-HttpClient())
{
字符串查询;
使用(var content=newformurlencodedcontent(newdictionary)()
{
{“用户名”,用户名},
{“密码”,密码}
}))
{
query=content.ReadAsStringAsync().Result;
}
var模型=新{
username=txtUsername.Text,
password=txtPassword.Text
};
var json=JsonConvert.serialized对象(模型);
var user=newstringcontent(json,Encoding.UTF8,“application/json”);
使用(var response=wait client.PostAsync@)http://localhost/dataagent/api/user/authenticate“,用户))
{
if(响应。IsSuccessStatusCode)
{
var result=await response.Content.ReadAsStringAsync();
//在这里处理结果
}
}
}

是的,您可以包装API。但是,如果它们都在同一台IIS服务器上,那么为什么不能共享相同的代码模块,而不需要网络开销来传递消息呢?这是一个相当广泛的问题。您想访问实际API服务的所有端点,还是只访问有限数量的端点?换句话说,如果“后台”(backstage)API有更多的端点,您希望为客户端创建代理服务还是有限/自定义API?两种方案都可以实施,但需要不同的方法。至于另一个问题:您是否应该使用GET或POST很大程度上取决于您考虑的操作类型。GET请求的参数数量和大小有时可能是一个限制因素。当然这是可能的。通常,POST操作意味着某种状态的改变,在这种情况下,隐藏在GET后面是不可取的