Move the pic controller to a minimal API
This commit is contained in:
parent
8debda5c67
commit
d5533c0ff9
@ -32,8 +32,6 @@ app.UseCors("CorsPolicy");
|
|||||||
app.UseAuthentication();
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapGet("/", () => Results.Redirect("/swagger"));
|
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
app.MapReverseProxy();
|
app.MapReverseProxy();
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.3" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.3" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.3" />
|
||||||
|
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="7.0.5" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="7.0.3" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.3" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="7.0.3" />
|
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="7.0.3" />
|
||||||
|
@ -19,8 +19,6 @@ var app = builder.Build();
|
|||||||
|
|
||||||
app.UseServiceDefaults();
|
app.UseServiceDefaults();
|
||||||
|
|
||||||
app.MapGet("/", () => Results.Redirect("/swagger"));
|
|
||||||
|
|
||||||
app.MapGrpcService<BasketService>();
|
app.MapGrpcService<BasketService>();
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
|
42
src/Services/Catalog/Catalog.API/Apis/PicApi.cs
Normal file
42
src/Services/Catalog/Catalog.API/Apis/PicApi.cs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
using Microsoft.AspNetCore.Routing;
|
||||||
|
|
||||||
|
namespace Catalog.API.Apis;
|
||||||
|
|
||||||
|
public static class PicApi
|
||||||
|
{
|
||||||
|
public static IEndpointConventionBuilder MapPicApi(this IEndpointRouteBuilder routes)
|
||||||
|
{
|
||||||
|
return routes.MapGet("api/v1/catalog/items/{catalogItemId:int}/pic",
|
||||||
|
async (int catalogItemId, CatalogContext db, IWebHostEnvironment environment) =>
|
||||||
|
{
|
||||||
|
var item = await db.CatalogItems.FindAsync(catalogItemId);
|
||||||
|
|
||||||
|
if (item is null)
|
||||||
|
{
|
||||||
|
return Results.NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var path = Path.Combine(environment.ContentRootPath, "Pics", item.PictureFileName);
|
||||||
|
|
||||||
|
string imageFileExtension = Path.GetExtension(item.PictureFileName);
|
||||||
|
string mimetype = GetImageMimeTypeFromImageFileExtension(imageFileExtension);
|
||||||
|
|
||||||
|
return Results.File(path, mimetype);
|
||||||
|
})
|
||||||
|
.WithTags("Pic")
|
||||||
|
.Produces(404);
|
||||||
|
|
||||||
|
static string GetImageMimeTypeFromImageFileExtension(string extension) => extension switch
|
||||||
|
{
|
||||||
|
".png" => "image/png",
|
||||||
|
".gif" => "image/gif",
|
||||||
|
".jpg" or ".jpeg" => "image/jpeg",
|
||||||
|
".bmp" => "image/bmp",
|
||||||
|
".tiff" => "image/tiff",
|
||||||
|
".wmf" => "image/wmf",
|
||||||
|
".jp2" => "image/jp2",
|
||||||
|
".svg" => "image/svg+xml",
|
||||||
|
_ => "application/octet-stream",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -1,61 +0,0 @@
|
|||||||
// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
|
|
||||||
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers;
|
|
||||||
|
|
||||||
[ApiController]
|
|
||||||
public class PicController : ControllerBase
|
|
||||||
{
|
|
||||||
private readonly IWebHostEnvironment _env;
|
|
||||||
private readonly CatalogContext _catalogContext;
|
|
||||||
|
|
||||||
public PicController(IWebHostEnvironment env,
|
|
||||||
CatalogContext catalogContext)
|
|
||||||
{
|
|
||||||
_env = env;
|
|
||||||
_catalogContext = catalogContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpGet]
|
|
||||||
[Route("api/v1/catalog/items/{catalogItemId:int}/pic")]
|
|
||||||
[ProducesResponseType((int)HttpStatusCode.NotFound)]
|
|
||||||
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
|
|
||||||
// GET: /<controller>/
|
|
||||||
public async Task<ActionResult> GetImageAsync(int catalogItemId)
|
|
||||||
{
|
|
||||||
if (catalogItemId <= 0)
|
|
||||||
{
|
|
||||||
return BadRequest();
|
|
||||||
}
|
|
||||||
|
|
||||||
var item = await _catalogContext.CatalogItems
|
|
||||||
.SingleOrDefaultAsync(ci => ci.Id == catalogItemId);
|
|
||||||
|
|
||||||
if (item != null)
|
|
||||||
{
|
|
||||||
var path = Path.Combine(_env.ContentRootPath, "Pics", item.PictureFileName);
|
|
||||||
|
|
||||||
string imageFileExtension = Path.GetExtension(item.PictureFileName);
|
|
||||||
string mimetype = GetImageMimeTypeFromImageFileExtension(imageFileExtension);
|
|
||||||
|
|
||||||
return PhysicalFile(path, mimetype);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetImageMimeTypeFromImageFileExtension(string extension)
|
|
||||||
{
|
|
||||||
string mimetype = extension switch
|
|
||||||
{
|
|
||||||
".png" => "image/png",
|
|
||||||
".gif" => "image/gif",
|
|
||||||
".jpg" or ".jpeg" => "image/jpeg",
|
|
||||||
".bmp" => "image/bmp",
|
|
||||||
".tiff" => "image/tiff",
|
|
||||||
".wmf" => "image/wmf",
|
|
||||||
".jp2" => "image/jp2",
|
|
||||||
".svg" => "image/svg+xml",
|
|
||||||
_ => "application/octet-stream",
|
|
||||||
};
|
|
||||||
return mimetype;
|
|
||||||
}
|
|
||||||
}
|
|
@ -35,9 +35,9 @@ global using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
|
|||||||
global using Microsoft.eShopOnContainers.Services.Catalog.API.ViewModel;
|
global using Microsoft.eShopOnContainers.Services.Catalog.API.ViewModel;
|
||||||
global using Microsoft.Extensions.Configuration;
|
global using Microsoft.Extensions.Configuration;
|
||||||
global using Microsoft.Extensions.DependencyInjection;
|
global using Microsoft.Extensions.DependencyInjection;
|
||||||
global using Microsoft.Extensions.FileProviders;
|
|
||||||
global using Microsoft.Extensions.Logging;
|
global using Microsoft.Extensions.Logging;
|
||||||
global using Microsoft.Extensions.Options;
|
global using Microsoft.Extensions.Options;
|
||||||
global using Polly;
|
global using Polly;
|
||||||
global using Polly.Retry;
|
global using Polly.Retry;
|
||||||
global using Services.Common;
|
global using Services.Common;
|
||||||
|
global using Catalog.API.Apis;
|
||||||
|
@ -18,8 +18,7 @@ var app = builder.Build();
|
|||||||
|
|
||||||
app.UseServiceDefaults();
|
app.UseServiceDefaults();
|
||||||
|
|
||||||
app.MapGet("/", () => Results.Redirect("/swagger"));
|
app.MapPicApi();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
app.MapGrpcService<CatalogService>();
|
app.MapGrpcService<CatalogService>();
|
||||||
|
|
||||||
|
@ -44,8 +44,6 @@ var app = builder.Build();
|
|||||||
|
|
||||||
app.UseServiceDefaults();
|
app.UseServiceDefaults();
|
||||||
|
|
||||||
app.MapGet("/", () => Results.Redirect("/swagger"));
|
|
||||||
|
|
||||||
app.MapGrpcService<OrderingService>();
|
app.MapGrpcService<OrderingService>();
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ using HealthChecks.UI.Client;
|
|||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
|
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
|
||||||
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
|
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
|
||||||
@ -100,7 +101,7 @@ public static class CommonExtensions
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IApplicationBuilder UseDefaultOpenApi(this IApplicationBuilder app, IConfiguration configuration)
|
public static IApplicationBuilder UseDefaultOpenApi(this WebApplication app, IConfiguration configuration)
|
||||||
{
|
{
|
||||||
var openApiSection = configuration.GetSection("OpenApi");
|
var openApiSection = configuration.GetSection("OpenApi");
|
||||||
|
|
||||||
@ -139,6 +140,9 @@ public static class CommonExtensions
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add a redirect from the root of the app to the swagger endpoint
|
||||||
|
app.MapGet("/", () => Results.Redirect("/swagger")).ExcludeFromDescription();
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,6 +155,8 @@ public static class CommonExtensions
|
|||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
services.AddEndpointsApiExplorer();
|
||||||
|
|
||||||
return services.AddSwaggerGen(options =>
|
return services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
/// {
|
/// {
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<PackageReference Include="Microsoft.AspNetCore.HealthChecks" />
|
<PackageReference Include="Microsoft.AspNetCore.HealthChecks" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
@ -21,7 +21,6 @@ var app = builder.Build();
|
|||||||
|
|
||||||
app.UseServiceDefaults();
|
app.UseServiceDefaults();
|
||||||
|
|
||||||
app.MapGet("/", () => Results.Redirect("/swagger"));
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
|
||||||
var eventBus = app.Services.GetRequiredService<IEventBus>();
|
var eventBus = app.Services.GetRequiredService<IEventBus>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user