我创建了一个具有附加功能的Java Web服务。我还创建了一个ASP.NET Web API,该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的URL(http://localhost:55223/addition/9/6
)中输入参数,而不是直接从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 Web服务代码
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));
}
}
有人请帮助我提前谢谢你。
参考方案
我想做的是,当我运行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中键入add时,路由引擎将查找名为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一词,后跟一个变量和另一个变量,请使用Addition控制器*的Get方法。
java.net.URI.create异常 - javajava.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…
将生成的类放入不同的Web服务的同一包中 - java我有几个JAX-WS Web服务,它们使用相同的类,但是从wsdl(在客户端)生成后,相同的类具有不同的包。我发现了如何使用@xmltype批注将它们放入同一包中。但是我不能使用它,因为源代码不可用。在服务部署期间是否可以通过某种方式修复它? 参考方案 您如何从WSDL生成客户端代码?如果您使用maven,则可以在插件设置中指定生成类的包(例如apache …
ASP.NET Web API 2中AuthorizeAttribute发生了什么变化? - c#我已经将项目和一组单元测试从ASP.NET Web API升级到ASP.NET Web API 2。我们将自定义DelegatingHandler用于自定义身份验证机制。它将Thread.CurrentPrincipal和HttpContext.Current.User设置为适当的System.Security.Claims.ClaimsPrincipal。…
Visual Studio Code可以增量编译Java Web App项目吗? - java我是Visual Studio Code的新手。我正在尝试将其与使用Maven的现有Java Web应用程序项目一起使用。我已经下载了推荐的Java扩展,例如Java Extension Pack,Java Maven和Java Tomcat。在IntelliJ(我通常的IDE)中,我可以很快地从Java的少量编辑转到Tomcat中刷新的WAR。如果我编辑文…
在ASP.NET WebForms中在服务器端初始化bootsrap datatimepicker - javascript我有这个HTML<div class='datepicker input-group date' id='datetimepickerStart'> <input type='text' class="form-control" /> <span c…