如何从xamarin表单中为休息服务添加标头和参数c#

时间:2017-02-25 08:17:27

标签: httpclient dotnet-httpclient

User login endpoint (POST Method)

https://developer.api.yodlee.com/ysl/restserver/v1/user/login

示例输入

cobrandName作为路径参数传递

cobSession作为授权标头传递

loginName和密码作为表单参数传递

cobrandName = cobrand的名字

LOGINNAME = TESTUSER

密码= Yodlee123

授权:{cobSession = 06142010_1:6666b4df326b8a26d6263054bdc4d1725d075230a082b8059ad7c20777b65d836b4eaa2dbf69169a448162c0ea09223012f130934cdee19114577f4c4a66c209}

所以这是示例数据api数据。我已经为我自己的服务器做了很多帖子,但是从来没有添加标题..而且有点困惑?

 var httpClient = new HttpClient();
        var json = JsonConvert.SerializeObject(t);
        HttpContent httpContent = new StringContent(json);
        httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        //httpContent.Headers.Add()
        var result = await httpClient.PostAsync(WebServiceUrl, httpContent);
        var RegisterResponse = await result.Content.ReadAsStringAsync();
        CobrandLoginModel TheObject = JsonConvert.DeserializeObject<CobrandLoginModel>(RegisterResponse);

我可以进行第一次通话并填充模型。但后来我需要再次发送sessionid(令牌),但我需要将其插入标题。我的sessionid返回将是下一个postasync的授权ID。

我认为正确的方法是这个

            httpClientUser.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("userSession", TheObject.session.cobSession);
我正走在正确的轨道上吗?

我需要创建             HttpContent httpContent = new StringContent(json);

如何创建格式

我需要发送3个参数 我需要添加返回的sessionid的授权头?

感谢

修改

这是我正在学习的网址 https://developer.yodlee.com/Yodlee_API/Getting_Started

需要添加参数 需要添加一个auth标头 然后发布

更新

我最终得到了这个

var httpClientUser = new HttpClient();
        var UserJson = JsonConvert.SerializeObject(newuser);
        HttpContent httpContentUser = new StringContent(UserJson);
        httpContentUser.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
        var createTheToken = "cobSession=" + TheObject.session.cobSession;
        var check =  httpClientUser.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "{" + createTheToken + "}");
        var CompleteResult = await httpClientUser.PostAsync(YodleeUserLoginUrl, httpContentUser);
        var RegisterResponseUser = await CompleteResult.Content.ReadAsStringAsync();
        YodleeUserModel LoggedInUser = JsonConvert.DeserializeObject<YodleeUserModel>(RegisterResponseUser);

它仍然不起作用...在ARC上使用相同的凭证我可以获得响应。

但是通过应用程序传递值不起作用

2 个答案:

答案 0 :(得分:0)

我开发了一个专门用于使用Xamarin Forms的REST客户端库。该库位于所有平台上。你可以在这里看到它或抓住NuGet。包括Xamarin Forms示例。

https://bitbucket.org/MelbourneDeveloper/restclient-.net/overview

以下是如何添加标题的示例:

_BitbucketClient.Headers.Add("Authorization", "Basic " + credentials);

答案 1 :(得分:0)

使用:

httpClientUser.DefaultRequestHeaders.Add(&#34;授权&#34;,令牌);