从单独的MVC应用程序本地引用Web Api

时间:2014-12-22 05:42:35

标签: c# asp.net-web-api asp.net-mvc-5

我有以下Web Api

public class ApiTestController : ApiController
{
    // GET api/<controller>
    [HttpGet]
    public string UploadImage(int id)
    {
        return "You entered = " + id;
    }
}

当运行时我输入/ api / ApiTest / 3它会命中它并返回你输入3

现在在我单独的MVC应用程序中,我试图通过执行以下操作来引用相同的api方法

 private const string WebUrl = "http://localhost:1769/api/ApiTest/";

    //
    // GET: /Home/
    public ActionResult Index()
    {
        try
        {
            var test = GetInvoiveNo(3);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        return View();
    }

    public string GetInvoiveNo(int id)
    {
        var uri = WebUrl + id;
        using (var httpClient = new HttpClient())
        {
            Task response = httpClient.GetStringAsync(uri);

            return JsonConvert.DeserializeObjectAsync<string>(response.ToString()).Result;
        }
    }

但我收到错误:

  

发生了一个或多个错误

所以我看看内部异常,这就是它所说的:

  

解析值时遇到意外的字符:S。路径&#39;&#39;,第0行,第0位。&#34;}

现在我不确定我在这里做错了什么,所以如果有人能够好好地告诉我或给我一个简单的例子,我会很感激。

1 个答案:

答案 0 :(得分:0)

您的问题是您的回复格式不正确。

在下面的代码中,您尝试使用response.ToString()这是错误的,您必须使用用户的响应结果。

public string GetInvoiveNo(int id)
    {
        var uri = WebUrl + id;
        using (var httpClient = new HttpClient())
        {
            var response = httpClient.GetStringAsync(uri);

            return JsonConvert.DeserializeObjectAsync<string>(response.Result).Result;
        }
    }