Почему Blazor Wasm не может обнаружить ответ на веб-вызов gRPC?C#

Место общения программистов C#
Ответить
Гость
 Почему Blazor Wasm не может обнаружить ответ на веб-вызов gRPC?

Сообщение Гость »


Я работаю над приложением .NET Microservices, используя .NET Aspire в качестве локального средства запуска. У меня есть wapp (веб-приложение) Blazor WebAssembly, которое подключается к моим службам .NET gRPC.

Раньше у меня не было этой проблемы, но теперь, когда метод gRPC выдает исключение как ошибку (RpcException), wapp Blazor выдает исключение отмены вызова вместо правильного сообщения статус ошибки. Например, в этом коде моего приложения Blazor:

попробуйте { ждут SmsService.ValidateVerificationCodeAsync(new() { Телефон = _verificationModel.Phone, Код = _verificationModel.VerificationCode }); } catch (исключение RpcException) { если (исключение.StatusCode == StatusCode.NotFound) { // Справиться } если (исключение.StatusCode == StatusCode.InvalidArgument) { // Справиться } бросать; } Когда сервер выдает исключение со статусом «Не найден», вместо того, чтобы обращаться к if и обрабатывать его, он выдает это в консоли браузера:

blazor.web.js:1 критика: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] Компонент рендеринга необработанных исключений: Status(StatusCode="Cancelled", Detail="В ответе не найден статус grpc. Если вызов gRPC является междоменным, CORS должен быть правильно настроен. Access-Control-Expose-Headers должен включать 'grpc -статус» и «grpc-сообщение».") Grpc.Core.RpcException: Status(StatusCode="Cancelled", Detail="В ответе не найден статус grpc. Если вызов gRPC является междоменным, CORS должен быть правильно настроен. Access-Control-Expose-Headers должен включать ' grpc-status» и «grpc-message».") в Bargeh.Main.Wapp.Client.Components.Pages.Login.OnVerificationSubmit() в C:\Source\Bargeh\Source\Wapps\Bargeh.Main.Wapp.Client\Components\Pages\Login.razor:line 352 в Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion (задача) в Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync() в Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion (задача) в Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (Task TaskToHandle, ComponentState owningComponentState) Вы можете догадаться, что сервер отменяет вызов, но когда я взглянул на вкладку сети в браузере, я увидел, что вызов работает правильно, возвращая правильную ошибку в виде заголовков, как показано ниже:

Access-Control-Allow-Origin: * Длина контента: 0 Тип контента: приложение/grpc-web Дата: Пт, 1 марта 2024 г., 06:12:45 GMT Grpc-сообщение: не найдено Статус Grpc: 5 Сервер: Кестрел Также я использую DI в wapp Blazor для предоставления клиентов:

builder.Services.AddSingleton(_ => { HttpClient httpClient = новый (новый GrpcWebHandler(GrpcWebMode.GrpcWeb, новый HttpClientHandler())) { BaseAddress = новый («https://localhost:5244») }; Канал GrpcChannel = GrpcChannel.ForAddress(httpClient.BaseAddress, new() { HttpClient = httpClient }); вернуть новый SmsProto.SmsProtoClient(канал); }); Ошибка не может быть связана с неправильной конфигурацией CORS, поскольку запрос отправлен, а ответ получен. Я предполагаю, что проблема в клиенте gRPC, который не может определить статус или сам отменяет вызов.
Ответить

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

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

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

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

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