使用WebClient调用授权的Web API

时间:2017-04-04 11:08:00

标签: api token webclient http-status-code-401 unauthorized

在网上搜索了几个小时后,我决定请你们帮忙。

我用一些简单的get / post方法编写了一个Web API。我使用的是个人用户帐户身份验证方法。

使用HttpClient我成功调用了每个AUTHORIZED get和post方法以及用于生成授权令牌的/ token端点。

问题是我必须在.NET Framework 3.5项目中调用这些方法。所以我尝试使用WebClient来执行此操作,因为我读到.NET Framework 3.5中不支持HttpClient。

GetAPIToken()METHOD生成Bearer令牌并且它可以正常工作。

 private static string GetAPIToken(string userName, string password, string apiBaseUri)
    {
        using (WebClient client = new WebClient())
        {
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            var response = client.UploadString(apiBaseUri + "/Token", "POST", "grant_type=password&username=" + userName + "&password=" + password);
            var jObject = JObject.Parse(response);
            return jObject.GetValue("access_token").ToString();
        }
    }

当我从Web API中删除[Authorize]属性时,此GET方法有效,但我无法在授权时使其工作。

    //GET ODRAĐENI POSTUPCI
    private static string GetOdradjeniPostupci(int Id, string token)
    {
        string apiBaseUri = "http://localhost:60511/";
        string serviceUrl = apiBaseUri + "api/ZOdradjeniPostupci";

        using (WebClient client = new WebClient())
        {
            client.Headers.Clear();
            client.Headers.Add("Content-Type", "application/json");
            client.Headers.Add("Authorization", "Bearer " + token);
            var response = client.DownloadString(serviceUrl + "/GetZOdradjeniPostupci?cZdrUst=" + Id.ToString());

            return response;
        }
    }

无论我尝试什么,我都会得到错误401 unathorized。 (来自互联网的有关授权标题的不同组合)。 希望你能就如何解决这个问题给我任何建议。

我会非常感激。

感谢。

0 个答案:

没有答案