繁体   English   中英

在ASP.NET Web API中创建输入参数并使用Java Web服务功能

[英]Creating input parameters and using java web service function in ASP.NET Web API

我创建了一个具有附加功能的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);
    }
}

您会在上面的代码中注意到几件事:

  1. 该控制器称为AdditionController 当您在网址中键入add时,路由引擎将查找名为Addition +单词Controller
  2. 它继承了ApiController而不是Controller
  3. 它具有“ Get操作。 如果你犯了一个GET请求,API路由引擎将搜索的命名动作Get或开始Get 因此它将找到此动作。
  4. 该操作返回IHttpActionResult 为何在这里查看我的答案。
  5. 它使用名为Ok的扩展方法来返回200的HTTP状态代码。这将遵循良好的安全性准则和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方法*。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM