带有标头和正文的SendAsync HttpPost的难度

时间:2019-06-26 05:38:35

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

难以从SendAsync获得针对HttpPost的200响应。这是用于使用基本身份验证令牌的多阶段身份验证来获取承载令牌,该承载令牌然后用于获取accessKeyId和accessKeySecret,然后用于获取可用的accessToken。

这是预期的格式(由供应商提供)。我相信我编写的代码可以正确处理Header数据,但是我不确定正文。使用Restlet或Postman进行测试时,必须完全按照所示输入车身。我认为当将引号和标记值放在C#中时,引号在翻译中会丢失;请参阅本节下面的代码。

*************************来自供应商******************* **********
使用承载令牌,现在可以使用端点创建访问密钥
https://xxxxxxxxxxxx/x-keys`
a.POST请求:
    一世。标头:
            1.授权:承载eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9…。
            2.内容类型:application / json
    ii。身体:
            1. {
            2.“ userId”:“ xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx”,
            3.“ tenantId”:“ xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx”
            4.}

>String newBearerToken = "bearer " + bearerToken;

>var cl = new HttpClient();
>cl.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
>cl.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", newBearerToken);

>var nvc = new List<KeyValuePair<string, string>>();
>nvc.Add(new KeyValuePair<string, string>("\"" + "userId" + "\"", "\"" +   "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "\""));
>nvc.Add(new KeyValuePair<string, string>("\"" + "tenantId" + "\"", "\"" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "\""));

>var req = new HttpRequestMessage(HttpMethod.Post, "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/-keys") { Content = new FormUrlEncodedContent(nvc) };
>var result = await cl.SendAsync(req);

我希望具有新访问令牌和200的HttpResponse的响应主体,但这是返回的内容:

  

“ result {状态代码:302,ReasonPhrase:”,版本:1.1,内容:   System.Net.Http.StreamContent,标题:{Content-Security-Policy:   default-src https:数据:'unsafe-inline''unsafe-eval';   connect-src ....“

1 个答案:

答案 0 :(得分:0)

身份验证标头应为以下内容...

new AuthenticationHeaderValue("Bearer", newBearerToken);

如果使用的是承载令牌,则不是“授权”

您当前的实现正在执行以下操作

授权:授权载体 eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9

也从令牌中删除载体

String newBearerToken = bearerToken;