@ -0,0 +1,16 @@ | |||
<Project Sdk="Microsoft.NET.Sdk.Web"> | |||
<PropertyGroup> | |||
<TargetFramework>net8.0</TargetFramework> | |||
<Nullable>enable</Nullable> | |||
<ImplicitUsings>enable</ImplicitUsings> | |||
<UserSecretsId>12ea8899-f963-4978-9139-09d18ab72fdc</UserSecretsId> | |||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" /> | |||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" /> | |||
</ItemGroup> | |||
</Project> |
@ -0,0 +1,6 @@ | |||
@AwesomeMicroservices.WebApi_HostAddress = http://localhost:5007 | |||
GET {{AwesomeMicroservices.WebApi_HostAddress}}/weatherforecast/ | |||
Accept: application/json | |||
### |
@ -0,0 +1,33 @@ | |||
using Microsoft.AspNetCore.Mvc; | |||
namespace AwesomeMicroservices.WebApi.Controllers | |||
{ | |||
[ApiController] | |||
[Route("[controller]")] | |||
public class WeatherForecastController : ControllerBase | |||
{ | |||
private static readonly string[] Summaries = new[] | |||
{ | |||
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | |||
}; | |||
private readonly ILogger<WeatherForecastController> _logger; | |||
public WeatherForecastController(ILogger<WeatherForecastController> logger) | |||
{ | |||
_logger = logger; | |||
} | |||
[HttpGet(Name = "GetWeatherForecast")] | |||
public IEnumerable<WeatherForecast> Get() | |||
{ | |||
return Enumerable.Range(1, 5).Select(index => new WeatherForecast | |||
{ | |||
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), | |||
TemperatureC = Random.Shared.Next(-20, 55), | |||
Summary = Summaries[Random.Shared.Next(Summaries.Length)] | |||
}) | |||
.ToArray(); | |||
} | |||
} | |||
} |
@ -0,0 +1,30 @@ | |||
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. | |||
# This stage is used when running from VS in fast mode (Default for Debug configuration) | |||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base | |||
USER $APP_UID | |||
WORKDIR /app | |||
EXPOSE 8080 | |||
EXPOSE 8081 | |||
# This stage is used to build the service project | |||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build | |||
ARG BUILD_CONFIGURATION=Release | |||
WORKDIR /src | |||
COPY ["AwesomeMicroservices.WebApi/AwesomeMicroservices.WebApi.csproj", "AwesomeMicroservices.WebApi/"] | |||
RUN dotnet restore "./AwesomeMicroservices.WebApi/AwesomeMicroservices.WebApi.csproj" | |||
COPY . . | |||
WORKDIR "/src/AwesomeMicroservices.WebApi" | |||
RUN dotnet build "./AwesomeMicroservices.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build | |||
# This stage is used to publish the service project to be copied to the final stage | |||
FROM build AS publish | |||
ARG BUILD_CONFIGURATION=Release | |||
RUN dotnet publish "./AwesomeMicroservices.WebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | |||
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration) | |||
FROM base AS final | |||
WORKDIR /app | |||
COPY --from=publish /app/publish . | |||
ENTRYPOINT ["dotnet", "AwesomeMicroservices.WebApi.dll"] |
@ -0,0 +1,36 @@ | |||
namespace AwesomeMicroservices.WebApi | |||
{ | |||
public class Program | |||
{ | |||
public static void Main(string[] args) | |||
{ | |||
var builder = WebApplication.CreateBuilder(args); | |||
// Add services to the container. | |||
builder.Services.AddControllers(); | |||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | |||
builder.Services.AddEndpointsApiExplorer(); | |||
builder.Services.AddSwaggerGen(); | |||
var app = builder.Build(); | |||
// Configure the HTTP request pipeline. | |||
if (app.Environment.IsDevelopment()) | |||
{ | |||
app.UseSwagger(); | |||
app.UseSwaggerUI(); | |||
} | |||
app.UseHttpsRedirection(); | |||
app.UseAuthorization(); | |||
app.MapControllers(); | |||
app.Run(); | |||
} | |||
} | |||
} |
@ -0,0 +1,52 @@ | |||
{ | |||
"profiles": { | |||
"http": { | |||
"commandName": "Project", | |||
"launchBrowser": true, | |||
"launchUrl": "swagger", | |||
"environmentVariables": { | |||
"ASPNETCORE_ENVIRONMENT": "Development" | |||
}, | |||
"dotnetRunMessages": true, | |||
"applicationUrl": "http://localhost:5007" | |||
}, | |||
"https": { | |||
"commandName": "Project", | |||
"launchBrowser": true, | |||
"launchUrl": "swagger", | |||
"environmentVariables": { | |||
"ASPNETCORE_ENVIRONMENT": "Development" | |||
}, | |||
"dotnetRunMessages": true, | |||
"applicationUrl": "https://localhost:7135;http://localhost:5007" | |||
}, | |||
"IIS Express": { | |||
"commandName": "IISExpress", | |||
"launchBrowser": true, | |||
"launchUrl": "swagger", | |||
"environmentVariables": { | |||
"ASPNETCORE_ENVIRONMENT": "Development" | |||
} | |||
}, | |||
"Container (Dockerfile)": { | |||
"commandName": "Docker", | |||
"launchBrowser": true, | |||
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger", | |||
"environmentVariables": { | |||
"ASPNETCORE_HTTPS_PORTS": "8081", | |||
"ASPNETCORE_HTTP_PORTS": "8080" | |||
}, | |||
"publishAllPorts": true, | |||
"useSSL": true | |||
} | |||
}, | |||
"$schema": "http://json.schemastore.org/launchsettings.json", | |||
"iisSettings": { | |||
"windowsAuthentication": false, | |||
"anonymousAuthentication": true, | |||
"iisExpress": { | |||
"applicationUrl": "http://localhost:49517", | |||
"sslPort": 44336 | |||
} | |||
} | |||
} |
@ -0,0 +1,13 @@ | |||
namespace AwesomeMicroservices.WebApi | |||
{ | |||
public class WeatherForecast | |||
{ | |||
public DateOnly Date { get; set; } | |||
public int TemperatureC { get; set; } | |||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); | |||
public string? Summary { get; set; } | |||
} | |||
} |
@ -0,0 +1,8 @@ | |||
{ | |||
"Logging": { | |||
"LogLevel": { | |||
"Default": "Information", | |||
"Microsoft.AspNetCore": "Warning" | |||
} | |||
} | |||
} |
@ -0,0 +1,9 @@ | |||
{ | |||
"Logging": { | |||
"LogLevel": { | |||
"Default": "Information", | |||
"Microsoft.AspNetCore": "Warning" | |||
} | |||
}, | |||
"AllowedHosts": "*" | |||
} |