#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 будут сохранены в браузере, поэтому вы не сможете их получить.