Однако, когда я использую тот же код в Blazor, я получаю ошибку CORS при попытке проверки подлинности почтового запроса, и эта ошибка является стандартной, которую вы получаете, когда нет Cors (я заменил арендатора на TENANT ниже):< /p>
Доступ для получения по адресу «https://login.microsoftonline.com/TENAN ... v2.0/token» из источника «https://localhost:7253» был заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Если вам подходит непрозрачный ответ, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.
Я не могу понять что может отличаться от проекта Blazor, который бы остановил эту работу, если он нормально работает в веб-API, и оба обращаются к одному и тому же URL-адресу Microsoft, и только один блокируется из-за CORS на запрошенном ресурсе, не считая того факта, что веб-API запускается из сервер и Blazor запускаются из браузера если только это не так.
Это часть кода, которая вызывает API:
Код: Выделить всё
string? loginEndPoint;
loginEndPoint = $"https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token";
HttpResponseMessage formResponse = await httpClient.PostAsync(loginEndPoint, formParamsEncoded);
Если невозможно заставить эту работу работать с Blazor, это означает, что мне нужно будет создать свой собственный веб-API, к которому я смогу добавить CORS и сначала вызвать его, а затем вызвать API Microsoft из моего API, что будет дополнительный уровень сложности, которого на самом деле быть не должно необходимо.
Мне было интересно, могу ли я добавить заголовки NoCors с вызывающей стороны Blazor, используя вместо этого SendAsync, но это дало ошибку сервера 400, а не Cors< /code> ошибка, поэтому не уверен, что это, возможно, продвинулось дальше или нет, но похоже, что SendAsync отправляет неправильный запрос, и я не уверен, почему:
Код: Выделить всё
var request = new HttpRequestMessage(HttpMethod.Post, loginEndPoint);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
request.SetBrowserRequestMode(BrowserRequestMode.NoCors);
request.SetBrowserRequestCache(BrowserRequestCache.NoStore); //optional
request.Content = formParamsEncoded;
HttpResponseMessage formResponse = await httpClient.SendAsync(request);
Подробнее здесь: https://stackoverflow.com/questions/793 ... low-origin
Мобильная версия