Graph API работает с веб-API, но в приложении Blazor присутствует ошибка, выдающая заголовок «Access-Control-Allow-OrigiC#

Место общения программистов C#
Ответить
Anonymous
 Graph API работает с веб-API, но в приложении Blazor присутствует ошибка, выдающая заголовок «Access-Control-Allow-Origi

Сообщение Anonymous »

Мне удалось настроить Microsoft Graph API и работать в приложении веб-API, где почтовый запрос был успешным для получения токена носителя и повторной отправки электронного письма.
Однако, когда я использую тот же код в 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);
По сути, я скопировал тот же файл конфигурации и тот же общий класс, который отправляет электронную почту из работающего веб-API, поэтому класс, отправляющий электронную почту, идентичен.
Если невозможно заставить эту работу работать с 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);
Я уже потратил часы, пытаясь найти способ заставить это работать и отправлять электронную почту, как это происходит в проектах веб-API, поэтому буду признателен за любую помощь.


Подробнее здесь: https://stackoverflow.com/questions/793 ... low-origin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»