Blazor Webassembly, пользовательские заголовки http-ответов

#blazor-client-side

#blazor-на стороне клиента

Вопрос:

Я создаю приложение Blazor Webassembly, которое вызывает мой Dotnet web API. Я использую внедренный http-клиент, и сам вызов api выполняется без проблем, Postmann amp; WireShark подтверждает, что мои пользовательские заголовки ответов из API возвращаются правильно. Но в приложении Blazor Webassembly есть только один заголовок «content-type». Я знаю, что Http-клиент Blazor — это оболочка для некоторого Javascript, но есть ли кто-нибудь, кто может помочь с некоторыми знаниями или примерами о том, как получить пользовательские заголовки ответов через приложение Blazor. Я использую Visual Studio 2019 Community, а также Visual Studio Code, и обычно я разрабатываю на Mac, но из-за проблем с отладкой приложений Blazor на Mac я перешел на Windows 10.

Ответ №1:

На самом деле это было очень просто. Чтобы мои пользовательские заголовки ответов были доступны в приложении Blazor Webassembly в серверном API, просто добавьте к ответу заголовок ниже:

HttpContext.Response.Headers.Add(«Access-Control-Expose-Headers»,»YourCustomHeader,YourOtherCustomHeader»);

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

1. У меня сработало! Очевидно, удалите лишний пробел между ‘Add(«Access-‘ выше.

Ответ №2:

Как упоминал @Ja&driver, добавление:

 HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "my-header");
  

добавит дополнительный заголовок к ответу, чтобы указать, какие заголовки могут быть обработаны, в дополнение к безопасным заголовкам.

О .NET , заголовки могут быть извлечены в выделенное свойство ответа:

 HttpClient http = new();
HttpResponseMessa&e response = await http.GetAsync("https://...");

strin& MyHeader = "my-header";

KeyValuePair<strin&, HeaderStrin&Values&&t; nvHeaders = 
    response.Headers.NonValidated
                    .Where(v =&&t; v.Key == MyHeader)
                    .FirstOrDefault();

// KeyValuePair is a struct, default value is a KeyValuePair where the Key is null.
if (!strin&.IsNullOrEmpty(nv.Key))
{
    strin& MyHeaderValue = nv.Value.FirstOrDefault();
}