Нашел решение - https://coderhelper.com/a/71080532/9276081, я также вставил сюда свой ответ -
Проблема связана не с Blazor WASM, а с тем, что этот заголовок был открыт на стороне вашего API. В вашей лазурной функции добавьте следующее -
Примечание: Postman по-прежнему будет показывать заголовки, даже если вы не открываете заголовки, как показано ниже. Это потому, что Postman не заботится о заголовках CORS. CORS — это просто концепция браузера, а не сильный механизм безопасности. Он позволяет вам ограничить, какие другие веб-приложения могут использовать ваши серверные ресурсы, и все.
Сначала создайте файл запуска для внедрения HttpContextAccessor
Необходимый пакет: Microsoft.Azure.Functions.Extensions
[assembly: FunctionsStartup(typeof(FuncAppName.Startup))]
namespace FuncAppName
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddScoped<HttpContextAccessor>();
}
}
}
Далее вставьте его в свою основную функцию -
using Microsoft.AspNetCore.Http;
namespace FuncAppName
{
public class SomeFunction
{
private readonly HttpContext _httpContext;
public SomeFunction(HttpContextAccessor contextAccessor)
{
_httpContext = contextAccessor.HttpContext;
}
[FunctionName("SomeFunc")]
public override Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, new[] { "post" }, Route = "run")] HttpRequest req)
{
var response = "Some Response"
_httpContext.Response.Headers.Add("my-custom-header", "some-custom-value");
_httpContext.Response.Headers.Add("my-other-header", "some-other-value");
_httpContext.Response.Headers.Add("Access-Control-Expose-Headers", "my-custom-header, my-other-header");
return new OkObjectResult(response)
}
Если вы хотите разрешить все заголовки, вы можете использовать подстановочный знак (я думаю, не проверено) -
_httpContext.Response.Headers.Add("Access-Control-Expose-Headers", "*");
Вам по-прежнему необходимо добавить URL-адрес веб-приложения в CORS платформы Azure. Вы можете добавить подстановочный знак *, подробнее здесь — https://iotespresso.com/allowing-all-cross-origin-requests-azure-functions/
для включения CORS для локальных приложений во время разработки — https://coderhelper.com/a/60109518/9276081
Теперь, чтобы получить доступ к этим заголовкам в Blazor WASM, например. можно -
protected override async Task OnInitializedAsync()
{
var content = JsonContent.Create(new { query = "" });
using (var client = new HttpClient())
{
var result = await client.PostAsync("https://func-app-name.azurewebsites.net/api/run", content);
var headers = result.Headers.ToList();
}
}
Вы пытались установить его на портале Azure?
Спасибо за ответ. Нет, я работаю локально. Можно ли это сделать на портале?
По приведенной выше ссылке да, вы можете настроить CORS на портале - imgur.com/a/5ic2RRq - хотя я не уверен насчет
WithExposedHeaders
. Хотя локально - чего мне не приходилось сделать на время - возможно, нет ..Привет Ричард. Я точно в такой же ситуации, как и вы. Удалось решить?
@WalterLockhart Нет, я так и не решил эту проблему. Было приложение PIC, так что это не критично. Таким образом, я действительно не тратил намного больше времени на этот вопрос. Если вы найдете решение, пожалуйста, дайте мне знать. ТЮ
@WalterLockhart см. coderhelper.com/a/71080645/9276081