0

Azure 的新手,我在内部地址http://internal-server:182/api/policies上有一个内部 Web API 。我已经建立了一个混合连接 internal-service.servicebus.windows.net。这是连接和工作的。

我的斗争是让 C# 代码能够连接和检索数据。几天后,我查看了各种文章、视频等,所有这些似乎都比我想要做的更先进,即调用 Web API 并读取 JSON。我试图简化代码但收到错误:

401 MalformedToken: Invalid authorization header: The request is missing WRAP authorization credentials. 

目前我有以下代码:

using (var client = new HttpClient())
{
    var url = "http://internal-service.servicebus.windows.net";

    var tp = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "<key goes here>");

    var token = tp.GetWebTokenAsync(url, string.Empty, true, TimeSpan.FromHours(1))
                .GetAwaiter()
                .GetResult();

    client.BaseAddress = new Uri(url);
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("ServiceBusAuthorization", token);

    var response = client.GetAsync("/api/policies").Result;
    string res = "";
    using (HttpContent content = response.Content)
    {
       // ... Read the string.
       Task<string> result = content.ReadAsStringAsync();
       res = result.Result;

       Label1.Text = res;
     }

}

任何帮助或方向将不胜感激?此代码运行后,Web 应用程序将作为 Azure Web 应用程序发布。

4

1 回答 1

0

似乎您没有发送正确的标题。

第一个建议:使用像fiddler这样的代理拦截调用,为此添加代理配置到您对 localhost 端口 8888 的调用,之后您可以尝试一些请求并查看您发送到服务器的原始 http,您也可以修改它直到它工作,一旦你修改你的代码,直到它发送相同的原始http。

您可以在此处找到更多信息:
使用简单 REST 客户端的 Microsoft Azure CreateQueue
https://github.com/ytechie/event-hubs-sas-generator

于 2018-09-11T11:50:38.883 回答