如何从我的 blazor (c#) 代码连接到 c# web api,两者都在 gitpod 上 运行?
How do I connect to the c# web api out of my blazor (c#) code, both running on gitpod?
我目前正在开发一个 PoC(概念验证)应用程序,前端使用 Blazor,后端使用 c# web api 进行数据访问。
我每次想访问 api 时都会收到 ERR_CONNECTION_REFUSED。
我的设置有点奇怪。
- 我用gitpod开发(在线IDE,代码在线visual studio)
- 整个过程 运行 在虚拟 Ubuntu 服务器上
文件夹结构为:
blazor_poc
api
Controllers
ApiRunningController.cs
BlazorApp
Pages
Index.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;
}
}
代码很多我想我已经post编辑了重要的代码片段。如果我忘记了什么,请不要介意发表评论。我会尽快post。
用户的解决方案: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;
}
}
我目前正在开发一个 PoC(概念验证)应用程序,前端使用 Blazor,后端使用 c# web api 进行数据访问。
我每次想访问 api 时都会收到 ERR_CONNECTION_REFUSED。 我的设置有点奇怪。
- 我用gitpod开发(在线IDE,代码在线visual studio)
- 整个过程 运行 在虚拟 Ubuntu 服务器上
文件夹结构为:
blazor_poc
api
Controllers
ApiRunningController.cs
BlazorApp
Pages
Index.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;
}
}
代码很多我想我已经post编辑了重要的代码片段。如果我忘记了什么,请不要介意发表评论。我会尽快post。
用户的解决方案: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;
}
}