Как мне подключиться к веб-API C # из моего кода Blazor (C #), который работает на gitpod?

В настоящее время я работаю над приложением PoC (доказательство концепции) с Blazor во внешнем интерфейсе и веб-API C # во внутреннем интерфейсе для доступа к данным.

Я получаю ERR_CONNECTION_REFUSED каждый раз, когда хочу получить доступ к api. У меня странная установка.

  • Я использую gitpod для разработки (онлайн IDE, код визуальной студии онлайн)
  • Все это работает на виртуальном сервере Ubuntu
  • # P3 #
    # P4 #
    # P5 #
    # P6 #
    # P7 #
    # P8 #
    # P9 #
    # P10 #

Мне нужно вызвать api из Index.razor. Я вызываю API так:

protected override async Task OnInitializedAsync()
{
    try
    {
        status = await Http.GetJsonAsync<string>("https://localhost:8394/ApiRunningController");
    }
    catch(Exception e)
    {
        requestSuccess = false;
        status = "ERROR: " + e.Message;
    }
 }

Так выглядит конфигурация API. launchSettings.json (только раздел "api": {}):

"api": {
  "commandName": "Project",
  "launchBrowser": true,
  "launchUrl": "apirunningcontroller",
  "applicationUrl": "https://localhost:8394;http://localhost:8393",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }

Мои методы ConfigureServices () и Configure () в Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddCors();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

        app.UseCors(c => c
               .AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader()
           );
    }

Контроллер Api:

[ApiController]
[Route("[controller]")]
public class ApiRunningController : ControllerBase
{
    // Some other code like initializing a logger in the constructor etc...
    [HttpGet]
    public string Get()
    {
        ApiModel model = new ApiModel();
        return model.Status;
    }
}

Это много кода. Думаю, я опубликовал важные фрагменты кода. Если я что-то забыл, не прочь оставить комментарий. Я выложу как можно скорее.


person Eldar Omerovic    schedule 07.02.2020    source источник
comment
Вы пробовали вызвать api своим браузером? Ваш URL-адрес должен быть: https://localhost:8394/ApiRunning   -  person agua from mars    schedule 07.02.2020
comment
Если вы хотите получить доступ к портам, представленным в среде разработки gitpod извне, вам необходимо перевести URL-адрес localhost в общедоступный. Запустите gp url <portnumber> на терминале, чтобы получить внешний URL-адрес. См. gitpod.io/docs/command-line-interface/#url   -  person Sven Efftinge    schedule 07.02.2020


Ответы (1)


Решение пользователя: sven-efftinge

Пришлось сделать "gp url 8394" в консоли, чтобы получить переведенный URL для порта 8394. Затем мне пришлось использовать этот URL для HttpRequest.

protected override async Task OnInitializedAsync()
{
    try
    {
        string translated_url = "https://8394-...gitpod.io/ApiRunningController"
        status = await Http.GetJsonAsync<string>(translated_url);
    }
    catch(Exception e)
    {
        requestSuccess = false;
        status = "ERROR: " + e.Message;
    }
 }
person Eldar Omerovic    schedule 07.02.2020