Использование OData в клиентском приложении ASP.NET Core 3.0 Blazor
- Создано клиентское приложение ASP.NET Core 3.0 Blazor
- Создал библиотеку классов.NET Standard 2.0 и сгенерировал прокси-класс OData, используя расширение генератора клиентского кода OData V4.
- Добавлена библиотека классов в качестве ссылки на проект для приложения Blazor
- Я попытался получить некоторые данные с сервера с помощью клиента OData и получил ошибку ниже:
async void IncrementCount()
{
MyContext context = new MyContext(new Uri(@"http://localhost:8080/Svc"));
context.IgnoreResourceNotFoundException = true;
var res = await context.Companies.ExecuteAsync();
var count = res.ToList().Count();
currentCount = count;
}
blazor.webassembly.js:1 WASM: Unhandled Exception:
blazor.webassembly.js:1 WASM: System.PlatformNotSupportedException: Operation is not supported on this platform.
blazor.webassembly.js:1 WASM: at System.Net.WebProxy.CreateDefaultProxy () <0x2b023a8 + 0x00008> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetSystemWebProxy () <0x2b02378 + 0x00000> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetDefaultProxy_UsingOldMonoCode () <0x2b022d8 + 0x00000> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetSection () <0x2b020f0 + 0x00026> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.WebRequest.get_InternalDefaultWebProxy () <0x2b01c50 + 0x00030> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.HttpWebRequest..ctor (System.Uri uri) <0x2b00040 + 0x000d2> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.HttpRequestCreator.Create (System.Uri uri) <0x2aff768 + 0x00004> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.WebRequest.Create (System.Uri requestUri, System.Boolean useUriBase) <0x2af9058 + 0x00108> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at System.Net.WebRequest.Create (System.Uri requestUri) <0x2af8cc0 + 0x00022> in <d7c7498765294217ab91d4da6fa04cb6>:0
blazor.webassembly.js:1 WASM: at Microsoft.OData.Client.HttpWebRequestMessage.CreateRequest (System.String method, System.Uri requestUrl, Microsoft.OData.Client.DataServiceClientRequestMessageArgs args) <0x2af15c8 + 0x00006> in <5d326e79a5274688a50559cf2d28aa99>:0
blazor.webassembly.js:1 WASM: at Microsoft.OData.Client.HttpWebRequestMessage..ctor (Microsoft.OData.Client.DataServiceClientRequestMessageArgs args) <0x2af0fa8 + 0x000a2> in <5d326e79a5274688a50559cf2d28aa99>:0
blazor.webassembly.js:1 WASM: at Microsoft.OData.Client.RequestInfo.CreateRequestMessage (Microsoft.OData.Client.BuildingRequestEventArgs requestMessageArgs) <0x2aec760 + 0x00260> in <5d326e79a5274688a50559cf2d28aa99>:0
blazor.webassembly.js:1 WASM: at Microsoft.OData.Client.ODataRequestMessageWrapper.CreateRequestMessageWrapper (Microsoft.OData.Client.BuildingRequestEventArgs requestMessageArgs, Microsoft.OData.Client.RequestInfo requestInfo) <0x2aec3e0 + 0x0000e> in <5d326e79a5274688a50559cf2d28aa99>:0
Это ограничение?
Примечание: тот же код работает нормально в консольном приложении.NET Framework
0 ответов
С помощью этого пакета Microsoft.OData.Extensions.Client вы сможете перехватыватьdataServiceContext.Configurations.RequestPipeline.OnMessageCreating
:
//Program.cs Main var httpClient = new HttpClient {BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)}; builder.Services.AddTransient (sp => httpClient); builder.Services.AddODataClient().AddHttpClient(httpClient); // Компонент Blazor Wasm с использованием Microsoft.OData.Extensions.Client; [Ввести] общедоступный IODataClientFactory ClientFactory {получить; задавать; } [Ввести] общедоступный NavigationManager NavigationManager {получить; задавать; } защищенное переопределение асинхронной задачи OnInitializedAsync () { ждать base.OnInitializedAsync(); Uri serviceRoot = NavigationManager.ToAbsoluteUri("/ odata"); // новый Uri ("http: // localhost / odata") var dataServiceContext = ClientFactory.CreateClient(serviceRoot); var result = ждать dataServiceContext.Students.ExecuteAsync(); }