1

我目前正在开发一个 PoC(概念证明)应用程序,前端使用 Blazor,后端使用 ac# web api 进行数据访问。

每次我想访问 api 时,我都会收到 ERR_CONNECTION_REFUSED。我确实有一个奇怪的设置。

  • 我使用 gitpod 进行开发(在线 IDE,Visual Studio 代码在线)
  • 整个事情都在虚拟 Ubuntu 服务器上运行
  • 文件夹结构为:

    blazor_poc

    api

    控制器

    ApiRunningController.cs

    Blazor 应用程序

    页面

    索引.razor

我需要从 Index.razor 调用 api。我这样调用 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"
  }

我在 Startup.cs 中的 ConfigureServices() 和 Configure() 方法:

    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;
    }
}

这是很多代码,我想我已经发布了重要的代码片段。如果我忘记了什么,请不要介意发表评论。我会尽快发布。

4

1 回答 1

2

用户解决方案:sven-efftinge

必须在控制台中执行“gp url 8394”来获取端口 8394 的翻译后的 url。然后我必须将该 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;
    }
 }
于 2020-02-07T14:47:08.950 回答