Compare commits

...

2 Commits

Author SHA1 Message Date
zhangyousheng 32ea7191ee feat: Controller 统一添加api路由前坠 2023-08-27 17:36:10 +08:00
zhangyousheng ab9cd9f5b5 feat: 添加API Controller 2023-08-24 10:07:44 +08:00
5 changed files with 106 additions and 1 deletions

View File

@ -2,5 +2,5 @@
public class GetUserDto : PageBase public class GetUserDto : PageBase
{ {
public string Keyword { get; set; } public string? Keyword { get; set; }
} }

View File

@ -0,0 +1,31 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using UserPointManagement.Application.Services;
using UserPointManagement.Model;
using UserPointManagement.Model.Dtos.User;
using UserPointManagement.Model.Entities;
namespace UserPointManagement.Web.Controllers;
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
/// <summary>
/// 获取用户
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[HttpGet]
public async Task<PageResultDto<User>> GetUsers([FromQuery]GetUserDto req)
{
return await _userService.GetUsers(req).ConfigureAwait(false);
}
}

View File

@ -0,0 +1,45 @@
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using Microsoft.AspNetCore.Mvc.Routing;
namespace UserPointManagement.Web;
public static class MvcOptionsExtensions
{
private static void UseGeneralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
{
opts.Conventions.Add(new RoutePrefixConvention(routeAttribute));
}
public static void UseGeneralRoutePrefix(this MvcOptions opts, string
prefix)
{
opts.UseGeneralRoutePrefix(new RouteAttribute(prefix));
}
}
public class RoutePrefixConvention : IApplicationModelConvention
{
private readonly AttributeRouteModel _routePrefix;
public RoutePrefixConvention(IRouteTemplateProvider route)
{
_routePrefix = new AttributeRouteModel(route);
}
public void Apply(ApplicationModel application)
{
foreach (var selector in application.Controllers.SelectMany(c => c.Selectors))
{
if (selector.AttributeRouteModel != null)
{
selector.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_routePrefix, selector.AttributeRouteModel);
}
else
{
selector.AttributeRouteModel = _routePrefix;
}
}
}
}

View File

@ -1,4 +1,6 @@
using System; using System;
using System.IO;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using AntDesign.ProLayout; using AntDesign.ProLayout;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
@ -26,6 +28,20 @@ namespace UserPointManagement.Web
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
services.AddControllers(options =>
{
options.UseGeneralRoutePrefix("/api");
});
services.AddEndpointsApiExplorer();
services.AddSwaggerGen(options =>
{
Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.xml").ToList().ForEach(file =>
{
options.IncludeXmlComments(file, true);
});
});
services.AddRouting(options => options.LowercaseUrls = true);
services.AddRazorPages(); services.AddRazorPages();
services.AddServerSideBlazor(); services.AddServerSideBlazor();
services.AddAntDesign(); services.AddAntDesign();
@ -46,6 +62,7 @@ namespace UserPointManagement.Web
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true); AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
@ -54,6 +71,16 @@ namespace UserPointManagement.Web
if (env.IsDevelopment()) if (env.IsDevelopment())
{ {
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
app.UseSwagger(o =>
{
// o.RouteTemplate = $"/api/swagger/{{documentName}}/swagger.json";
});
app.UseSwaggerUI(c =>
{
// c.RoutePrefix = $"/api/swagger";
// c.SwaggerEndpoint($"/api/swagger/v1/swagger.json",
// "UserPointManagement.Api API V1");
});
} }
else else
{ {
@ -69,6 +96,7 @@ namespace UserPointManagement.Web
app.UseEndpoints(endpoints => app.UseEndpoints(endpoints =>
{ {
endpoints.MapControllers();
endpoints.MapBlazorHub(); endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host"); endpoints.MapFallbackToPage("/_Host");
}); });

View File

@ -9,6 +9,7 @@
<PackageReference Include="AntDesign.Charts" Version="0.2.3" /> <PackageReference Include="AntDesign.Charts" Version="0.2.3" />
<PackageReference Include="AntDesign.ProLayout" Version="0.12.4" /> <PackageReference Include="AntDesign.ProLayout" Version="0.12.4" />
<PackageReference Include="System.Net.Http.Json" Version="6.0.0" /> <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>