在ASP.NET Web API

时间:2017-10-30 03:34:32

标签: java c# asp.net web-services

我创建了一个执行添加功能的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));
  }
}   

有人请提前帮助我,谢谢你。

1 个答案:

答案 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);
    }
}

您将在上面的代码中注意到一些事项:

  1. 控制器名为AdditionController。在url中键入addition时,路由引擎将查找名为Addition +单词Controller的控制器。
  2. 它继承ApiController而不是Controller
  3. 它有Get个动作。如果您发出GET请求,API路由引擎将搜索名为Get或以Get开头的操作。因此它会找到这个动作。
  4. 操作正在返回IHttpActionResult。请参阅我的回答here了解原因。
  5. 它使用名为Ok的扩展方法返回HTTP状态代码200.这是为了遵循良好的宁静指南和HTTP准则。
  6. 您可以这样调用上述内容:

    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 添加控制器的方法*。