我在MVC WebAPI中开发了几个webAPI,例如
public IHttpActionResult SendBroadcast(FinalPayload FinalPayload)
我想在此API中调用另一个web api。我的所有API都在同一个应用程序中。第二个API的签名是
public IHttpActionResult SendMessage(Notifications)
从我试过的第一个API
this.SendMessage(Notifications)
并收到类似于引用静态对象的错误消息....
我想知道是否允许这种调用webAPI的方式,或者我是否必须调用Web客户端或类似的方式。
非常感谢任何帮助。
答案 0 :(得分:2)
第一种方法
您必须重新设计应用程序中的代码,即解决方案。
第二种方法
正如您所想,当然您可以创建一个Web客户端来访问另一个项目中的Web API。
答案 1 :(得分:0)
不,像往常一样,您需要创建一个新的Web客户端才能使用API。
@Marcus H在评论中建议的内容也是可行的,只需将第二个API 中的逻辑包装到一个单独的方法(无论是实例还是静态)中,然后从中调用它API 可以解决问题。
答案 2 :(得分:0)
是的,你可以。您可以在调用method1的控制器方法method2中创建webClient。
这是一个可以用来帮助你的小帮助班:
namespace Api.Helpers
{
public static class ApiHelpers
{
private static string HttpGet(string url)
{
WebRequest request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
response.Close();
return responseFromServer;
}
public static string HttpPostJson(string url, string json)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
return result;
};
}
}
}
如果您想要基于Cookie的身份验证,那么只需使用RestSharp。 如果您使用Postman Chrome扩展程序工具,那么如果您可以访问您的终端,则可以自动生成C#代码。 只需将webclient代码放在Controller方法中,一个API调用就会有效地链接到另一个。
所以在你的ApiController中你写的东西是:
IHttpActionResult method1() {
var result = ApiHelpers.HttpGet("http://thing.com/test");
return Ok(result);
}