繁体   English   中英

如何在没有 https 的情况下使用 docker 容器运行 asp.net web api?

[英]How to run asp.net web api with docker container without https?

我正在尝试使用 docker 容器运行 asp.net web api,但是当我向 api 发送请求时,我得到状态代码 400(错误请求)作为响应。 当我通过 Visual Studio 运行 api 时,它运行良好。 我的意思是我可以向 api 发送请求并获得所需的响应。

这是 StartUp.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi_Token v1"));
            }

            //app.UseHttpsRedirection(); // this is commented out just to create container

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


            app.UseRouting();

            app.UseAuthentication();

            app.UseAuthorization();

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

这是launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:65362/",
      "sslPort": 44304
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApi_Token": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      //"applicationUrl": "https://localhost:44305;http://localhost:44304"
      "applicationUrl": "http://localhost:44304"
    },
    "Docker": {
      "commandName": "Docker",
      "launchBrowser": true,
      "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
      "publishAllPorts": true,
      "useSSL": false
    },
    "WSL": {
      "commandName": "WSL2",
      "launchBrowser": true,
      //"launchUrl": "https://localhost:4001",
      "launchUrl": "http://localhost:4001",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "ASPNETCORE_URLS": "https://localhost:4001;http://localhost:4000"
      },
      "distributionName": ""
    }
  }
}

这是我的 Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_URLS=http://+:80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["myApi.csproj", "./"]
RUN dotnet restore "./myApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "myApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myApi.dll"]

我真的很感激任何帮助!

我现在对dotnet一无所知,想构建你的API,但你没有发送所有必需的文件,所以我可以建议只是用“0.0.0.0”替换所有“localhost”出现,这应该可行。

请随时通知我,如果这不起作用,只需粘贴一个 API(如 hello world)进行测试,以及如何构建它等。我将在这里进行所有测试。

猜猜。

"urls=http://0.0.0.0:80"添加到我的 Dockerfile 的入口点对我有用。 在你的情况下,它会像

ENTRYPOINT ["dotnet", "myApi.dll", "urls=http://0.0.0.0:80"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM