Как получить файлы cookie из HttpClient из C # Blazor WebAssembly

#c# #cookies #blazor-client-side #blazor-webassembly

#c# #файлы cookie #blazor-на стороне клиента #blazor-webassembly

Вопрос:

Я пытался выяснить, что не так с моим кодом. Я знаю, что он работает на серверном Blazor, но почему не в типе сборки?

Мой код выглядит следующим образом.

 CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient authClient = new HttpClient(handler);

var requestMessage = new HttpRequestMessage(HttpMethod.Post, theUrl) { Content = new FormUrlEncodedContent(dict) };

var responseCookies = cookies.GetCookies(theUrl).Cast<Cookie>();
 

Я отлаживаю код построчно, нажимая клавишу F10 в VS, при нажатии handler.CookieContainer = cookies; она выдает исключение с надписью: Property Container is not supported. «Итак, как я могу получить файлы cookie?»
Просто чтобы дать вам контекст, веб-API не является Restful, и это старая технология, поэтому она основана на простом запросе http POST и возвращает xml и некоторые файлы cookie для безопасности.

Ответ №1:

Я сделал следующее для чтения из файлов cookie:

1. Внутри js-файла:

 window.methods = {
    getCookie: function (cname) {
        var name = cname   "=";
        var decodedCookie = decodeURIComponent(document.cookie);
        var ca = decodedCookie.split(';');
        for (var i = 0; i < ca.length; i  ) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
  
 

2. Внутренний компонент:

  [Inject]  IJSRuntime _JSRuntime { get; set; }

var cookieToeknValue = await _JSRuntime.InvokeAsync<string>("methods.getCookie", "CookieName);
 

Комментарии:

1. Файл cookie поступает из http-запроса. Поэтому, если я смогу получить его из HttpClient, я буду тем, кто установит его в cookie браузера с помощью JavaScript.

2. Я не думаю, что это решает проблему. OP отправляет данные через http-клиент. Я не думаю, что данные cookie будут сохранены в браузере, поэтому вы не сможете их получить.