Использование OData в клиентском приложении ASP.NET Core 3.0 Blazor

  1. Создано клиентское приложение ASP.NET Core 3.0 Blazor
  2. Создал библиотеку классов.NET Standard 2.0 и сгенерировал прокси-класс OData, используя расширение генератора клиентского кода OData V4.
  3. Добавлена ​​библиотека классов в качестве ссылки на проект для приложения Blazor
  4. Я попытался получить некоторые данные с сервера с помощью клиента 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();
    }