【问题标题】:Calling addition function to calculate sum of input parameters调用加法函数计算输入参数的总和
【发布时间】:2017-11-01 07:15:44
【问题描述】:

我有这组代码(ASP.NET Web 应用程序),它调用了一个 java web 服务的附加功能。

RestfulClient.cs

public class RestfulClient
{
    private static HttpClient client;

    internal Task addition(object firstNumber, object secondNumber)
    {
        throw new NotImplementedException();
    }

    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;
    }
}

我应该在我的控制器中添加哪些代码来调用添加功能?我希望用户在 URL 中输入两个数字(当我运行我的 ASP.NET Web API 时)并且我希望 ASP.NET Web API 能够使用我从 java Web 服务调用的加法方法来计算求和并显示为例如{"firstNumber":9,"secondNumber":6,"sum":15}.

AdditionController.cs

public class AdditionController : ApiController
{
    private RestfulClient restfulClient = new RestfulClient();

    public IHttpActionResult Get(int firstNumber, int secondNumber)
    {
        //What do i have to include here?
        //Tried
        var result = restfulClient.addition(firstNumber, secondNumber); 
        return Json(result);

    }
}

我尝试了一些代码,但没有得到任何输出。该页面只是继续加载而没有给我任何输出。

WebApiConfig.cs

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
        name: "AdditionApi",
        routeTemplate: "api/addition/{firstNumber}/{secondNumber}",
        defaults: new { action = "Get", controller = "Addition" }
        );
    }
}

Addition.java

public class Addition {

private int firstNumber, secondNumber, sum;

public Addition(String firstNumber, String secondNumber) {
    this.firstNumber = Integer.parseInt(firstNumber.trim());
    this.secondNumber = Integer.parseInt(secondNumber.trim());
    updateSum();
  }

public int getFirstNumber() {
    return firstNumber;
  }

public void setFirstNumber(int firstNumber) {
    this.firstNumber = firstNumber;
    updateSum();
  }

public int getSecondNumber() {
    return secondNumber;
  }

public void setSecondNumber(int secondNumber) {
    this.secondNumber = secondNumber;
    updateSum();
  }

public int getSum() {
    return sum;
  }

public void updateSum() {
    this.sum = this.firstNumber + this.secondNumber;
  }

@Override
public String toString() {
    return String.format("Addition [firstNumber=%d, secondNumber=%d, sum=%d%n", //
            firstNumber, secondNumber, sum);
  }
}

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

有人请帮助我。非常感谢您。

【问题讨论】:

    标签: java c# asp.net calling-convention


    【解决方案1】:

    问题原来是在 RestfulClient.adition 中程序卡在了一行: var response = await client.GetAsync(endpoint);永远不会收到回复。目前的解决方法可能是:

    public string addition(int firstNumber, int secondNumber)
            {
                try
                {
                    var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber);
                    HttpResponseMessage response = client.GetAsync(endpoint).Result;
                    //This will check whether or not the response was executed successfully(status code 200ish or not 
                    if (response.IsSuccessStatusCode)
                    {
                        return response.Content.ReadAsStringAsync().Result;
                    }
                    else
                    {
                        throw new Exception($"The server responded with a bad request of type: {response.StatusCode}");
                    }
                }
                catch (Exception e)
                {
                    HttpContext.Current.Server.Transfer("ErrorPage.html");
                }
                return null;
            }
    

    如果有人对此问题的解决方案较少,请分享。

    【讨论】:

    • 我该怎么做呢..?你能帮我详细说明一下吗?
    • 我不想在其中输入值。我希望它能够以某种方式输入 URL 中的值作为参数
    • 我想使用我在 java web 服务中创建的添加功能
    • 啊,我读你的 cmets 有点晚了,所以我的帖子已经有点过时了。我现在有一个站立会议,之后我会解决这个问题。
    • 啊,我想我一开始就错了。关于圈子参考和东西。至少只要您没有从 C# 本地主机和 Restful 客户端类中的 Java REST api 切换端口。我会删除很多我之前的编辑并给它代码,这样你就可以更好地调试了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多