我创建了一个执行添加功能的java Web服务。我还创建了一个ASP.NET Web API,它调用java Web服务并显示结果。假设我输入http://localhost:8080/addition/9/6
作为带有java web服务函数应添加的输入参数的URL。我得到输出数据为{"firstNumber":9,"secondNumber":6,"sum":15}
。当我运行我的ASP.NET Web API时,我将被重定向到http://localhost:55223/
,我将获得输出数据{"firstNumber":9,"secondNumber":6,"sum":15}
。
现在,我想要做的是,当我运行ASP.NET Web API时,我应该能够在ASP.NET Web API(http://localhost:55223/addition/9/6
)的URL中输入参数而不是直接从Java Web服务显示结果,我想在我的API中使用java web服务的功能来计算输入参数的总和。有谁知道我该怎么做呢?我应该在我的代码中做出哪些更改?
以下是我的代码:
ASP.NET Web API代码
RestfulClient.cs
public class RestfulClient
{
private static HttpClient client;
private static string BASE_URL = "http://localhost:8080/";
static RestfulClient()
{
client = new HttpClient();
client.BaseAddress = new Uri(BASE_URL);
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
}
public async Task<string> addition(int firstNumber, int secondNumber)
{
try
{
var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber);
var response = await client.GetAsync(endpoint);
return await response.Content.ReadAsStringAsync();
}
catch (Exception e)
{
HttpContext.Current.Server.Transfer("ErrorPage.html");
}
return null;
}
}
ApiController.cs
public class ApiController : Controller
{
private RestfulClient restfulClient = new RestfulClient();
public async Task<ActionResult> Index()
{
int firstNumber = 9;
int secondNumber = 6;
var result = await restfulClient.addition(firstNumber, secondNumber);
return Content(result);
}
}
Java网络服务代码
AdditionController.java
@RestController
public class AdditionController {
private static final String template = " %s";
private static int getSum;
@RequestMapping("/addition/{param1}/{param2}")
@ResponseBody
public Addition addition
(@PathVariable("param1") int firstNumber,@PathVariable("param2") int secondNumber) {
return new Addition(
(String.format(template, firstNumber)), String.format(template, secondNumber));
}
}
有人请提前帮助我,谢谢你。
答案 0 :(得分:1)
我想要做的是,当我运行ASP.NET Web API时,我应该能够在ASP.NET Web API的URL中输入参数(http://localhost:55223/addition/9/6)
Web API使用了许多约定,如果你玩得很好,那么事情就会很好。您需要做的第一件事就是重命名您的控制器:
public class AdditionController : ApiController
{
public async Task<IHttpActionResult> Get(int firstNumber, int secondNumber)
{
var result = await restfulClient.addition(firstNumber, secondNumber);
return Ok(result);
}
}
您将在上面的代码中注意到一些事项:
AdditionController
。在url中键入addition时,路由引擎将查找名为Addition
+单词Controller
的控制器。 ApiController
而不是Controller
。Get
个动作。如果您发出GET请求,API路由引擎将搜索名为Get
或以Get
开头的操作。因此它会找到这个动作。IHttpActionResult
。请参阅我的回答here了解原因。Ok
的扩展方法返回HTTP状态代码200.这是为了遵循良好的宁静指南和HTTP准则。您可以这样调用上述内容:
http://localhost:55223/addition?firstNumber=1&secondNumber=6
如果您希望能够像这样调用它:
http://localhost:55223/addition/9/6
然后,您需要对 WebApiConfig 类进行一些更改。在 DefaultApi :
的代码之前将其添加到代码中config.Routes.MapHttpRoute(
name: "AdditionApi",
routeTemplate: "api/addition/{firstNumber}/{secondNumber}",
defaults: new { action = "Get", controller = "Addition" }
);
上面我们告诉路由引擎:嘿路由引擎,如果url包含单词 api / addition 后跟一个变量和另一个变量,那么使用 Get 添加控制器的方法*。