Я работаю над приложением Windows, и у меня есть некоторые проблемы с куки-файлами. Обратите внимание, что я работаю с Windows.Web.Http, а не с пространством имен HttpClient.HttpClient (Windows.Web.Http), работающий с кукисами
API, с которым я работаю, использует аутентификационный заголовок для аутентификации. В основном после POST для входа в систему мне нужен способ вернуть файлы cookie, а затем использовать эти файлы cookie для выполнения последующих вызовов API. Я опубликовал пример того, что у меня есть, и это удается. Я вижу куки в объекте результата. Я просто не совсем уверен, куда идти отсюда/как действовать дальше. Благодаря! Есть идеи?
using MyApi.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Web.Http;
using Newtonsoft.Json;
using MyApi.Models.Auth;
using MyApi.Models;
namespace MyApi
{
public class MyService
{
private const string MyBaseUrl = "http://api.my.com:3000";
private readonly HttpClient _httpClient = new HttpClient();
public async Task<SignInResponse> AttemptLogin(string username, string password)
{
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
throw new ArgumentException("Username or password is null or empty");
var uri = new Uri(string.Format("{0}/{1}", MyBaseUrl, "auth/signin"));
var authSignIn = new Models.Auth.SignInRequest();
authSignIn.Email = username;
authSignIn.Password = password;
var myObject = JsonConvert.SerializeObject(authSignIn);
// I see the headers in the result object, but I'm not
// sure the best way to a) get them out and b) shove them into
// all of the next calls
var result = await _httpClient.PostAsync(uri,
new HttpStringContent(myObject.ToString(),
Windows.Storage.Streams.UnicodeEncoding.Utf8,
"application/json"));
var content = await result.Content.ReadAsStringAsync();
var successResponse = new SignInResponse();
try
{
successResponse = JsonConvert.DeserializeObject<SignInResponse>(content);
}
catch (Exception)
{
var failResponse = JsonConvert.DeserializeObject<ErrorResponse>(content);
throw new Exception(failResponse.message);
}
return successResponse;
}
}
}
взглянуть на 'CookieContainer' в следующем сообщении ... Http://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage –
Это фактически использует пространство имен System.Net, в то время как мое использует Windows.Web.Http. Он не отображается. Cookie Container доступен для пространства имен, с которым я работаю. – YnotDraw
Привет, @YnotDraw Вы нашли решение по вашему вопросу? – alminh