【发布时间】:2021-01-09 01:13:38
【问题描述】:
我创建了一个 ASP.NET Core Web API,它可以 ping 一个 Mongodb 和一个 docker 容器。 Web api 调用在不使用 docker 时工作,但在我使用它时返回 Not Found 错误。我认为这与我正在运行的端口有关,但我不确定因为这是我第一次使用 docker。
在命令提示符下我这样做:
docker build -t projectname .
然后我运行图像
docker run -p 8080:80 projectname
运行后,如果我调用 http://localhost:8080/api/classname,我会收到 Not Found 错误消息“这是我的无效消息”,所以看起来我的 docker 容器正在运行。当我调用 http://localhost:8080/api/classname?id=1(这是一个有效的 id)时,我仍然收到 Not Found 错误,但没有收到“这是我的无效消息”文本.
类名控制器 API GET:
[Route("api/[controller]")]
[ApiController]
public class ClassNameController : Controller
{
[HttpGet]
public IActionResult GetDescendents(int id)
{
var mongoDbService = new MongoDbService();
try
{
var node = mongoDbService.GetTreeNodeById(id);
if (node == null)
{
return NotFound("this is my invalid message");
}
else
{
//stuff happens
}
}
catch (Exception e)
{
return BadRequest(e);
}
return Ok();
}
Dockerfile:
See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ProjectName/ProjectName.csproj", "ProjectName/"]
RUN dotnet restore "ProjectName/ProjectName.csproj"
COPY . .
WORKDIR "/src/ProjectName"
RUN dotnet build "ProjectName.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ProjectName.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProjectName.dll"]
launchSetting.json:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:8080",
"sslPort": 8080
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"DockerAPI": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
},
"Docker": {
"commandName": "Docker",
"launchBrowser": true,
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/",
"publishAllPorts": true,
"useSSL": true
}
}
}
【问题讨论】:
-
您尝试调用的 API 的 url 是什么?
-
我正在尝试打电话给
http://localhost8080/api/classname?id=1
标签: c# asp.net docker asp.net-core-webapi