无法从WebAPI获得响应

时间:2017-09-12 08:01:04

标签: c# ajax rest asp.net-web-api cors

更新:现在我对错误有了更好的理解。我正面临着这里解释的错误:https://stackoverflow.com/a/20035319/3021830。这就是我现在应该解决的问题。

我使用ASP.NET WebAPI创建了REST API。它托管在http://localhost:54700/上。我也有一个路由“api / RefData”的GET方法,所以基本上我需要调用http://localhost:54700/api/RefData。 IT也标有AllowAnonymous属性

当我从PostMan进行GET调用时,一切似乎都运行良好。 但我尝试从我的ASP.NET MVC应用程序中调用它,无论是从服务器还是客户端我都无法获得任何结果。

我的服务器端代码是:

private static HttpClient _client;
private static HttpClient Client
{
    get
    {
        if (_client == null)
        {
            _client = new HttpClient();
            _client.BaseAddress = new Uri("http://localhost:54700/");
            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        }
        return _client;
    }
}


internal List<HeardAbout> HeardAbouts
{
    get
    {
        if (System.Web.HttpContext.Current.Session["refData"] == null)
        {
            GetRefData().Wait();
        }
        return System.Web.HttpContext.Current.Session["refData"] as List<RefData>;
    }
}

private async Task<List<RefData>> GetRefData()
{
    try
    {
        List<RefData> has = new List<RefData>();
        // The following line is where the code leaves debugging
        HttpResponseMessage response = await Client.GetAsync("api/RefData");
        if (response.IsSuccessStatusCode)
        {
            has = await response.Content.ReadAsAsync<List<RefData>>();
            System.Web.HttpContext.Current.Session["refData"] = has;
        }
        return has;
    }
    catch (Exception ex)
    {
        throw;
    }
}

我的客户端代码是:

$.ajax({
    type: "GET",
    url: "http://localhost:54700/api/RefData",
    cache: false,
    contentType: "application/json; charset=utf-8",
    success: function (response) {
        if (callback)
            callback(response.d);
    },
    error: function (response) {
        if (callback)
            error(response.d);
    },
});

服务器端代码到达注释行。然后离开调试。我用try-catch块包装了代码,但它也没有引发异常。

客户端代码因statusText“error”而出错。

这些代码有什么问题,我该如何解决?

提前致谢。

1 个答案:

答案 0 :(得分:1)

正如我在更新中所表示的那样,调用失败了,因为我的Web应用程序和WebAPI的域地址不同。

要解决此问题,我使用了此处提供的信息:Enabling Cross-Origin Requests in ASP.NET Web API 2。现在它有效。