.net Core 一些实用方法
统一增加路由前缀
1.1 创建RouteConvention类继承IApplicationModelConvention
public class RouteConvention : IApplicationModelConvention
{
private readonly AttributeRouteModel _attributeRouteModel;
private readonly AttributeRouteModel _attributeRouteModel;
/// <summary>
/// 接收一个路由模板
/// </summary>
/// <param name="routeTemplateProvider"></param>
public RouteConvention(IRouteTemplateProvider routeTemplateProvider)
{
_attributeRouteModel = new AttributeRouteModel(routeTemplateProvider);
}
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
//获得已经有路由的控制器
var haveRouteSelectorModels = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
foreach (var selectorModel in haveRouteSelectorModels)
{
selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_attributeRouteModel, selectorModel.AttributeRouteModel);
}
//获得还没有路由的控制器
var notHaveRouteSelectorModels = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
foreach (var selectorModel in notHaveRouteSelectorModels)
{
selectorModel.AttributeRouteModel = _attributeRouteModel;
}
}
}
}
/// 接收一个路由模板
/// </summary>
/// <param name="routeTemplateProvider"></param>
public RouteConvention(IRouteTemplateProvider routeTemplateProvider)
{
_attributeRouteModel = new AttributeRouteModel(routeTemplateProvider);
}
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
//获得已经有路由的控制器
var haveRouteSelectorModels = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList();
foreach (var selectorModel in haveRouteSelectorModels)
{
selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_attributeRouteModel, selectorModel.AttributeRouteModel);
}
//获得还没有路由的控制器
var notHaveRouteSelectorModels = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList();
foreach (var selectorModel in notHaveRouteSelectorModels)
{
selectorModel.AttributeRouteModel = _attributeRouteModel;
}
}
}
}
1.2 创建一个MvcOptions 的扩展帮助类
public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
{
// 添加我们自定义 实现IApplicationModelConvention的RouteConvention
opts.Conventions.Insert(0, new RouteConvention(routeAttribute));
}
{
// 添加我们自定义 实现IApplicationModelConvention的RouteConvention
opts.Conventions.Insert(0, new RouteConvention(routeAttribute));
}
1.3 在ConfigureServices方法中增加
services.AddMvc(option => {
option.UseCentralRoutePrefix(new RouteAttribute("/api/v1"));//在各个控制器添加前缀(没有特定的路由前面添加前缀)
});
option.UseCentralRoutePrefix(new RouteAttribute("/api/v1"));//在各个控制器添加前缀(没有特定的路由前面添加前缀)
});
这样启动的时候会在所有的控制器原本的路由前增加Api/v1
前后端分离的跨域问
在Startup中增加
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
在 ConfigureServices 中增加
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder => builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
);
});
{
options.AddPolicy(MyAllowSpecificOrigins,
builder => builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
);
});
增加中间件
app.UseCors(MyAllowSpecificOrigins);
修改 UseEndpoints
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireCors(MyAllowSpecificOrigins);
;
});
{
endpoints.MapControllers().RequireCors(MyAllowSpecificOrigins);
;
});
dotnet swaggerTest.dll --urls="http://localhost:5000" --ip="127.0.0.1" --Port=5000
dotnet swaggerTest.dll --urls="http://localhost:5010" --ip="127.0.0.1" --Port=5010
dotnet swaggerTest.dll --urls="http://localhost:5020" --ip="127.0.0.1" --Port=5020
dotnet swaggerTest.dll --urls="http://localhost:5010" --ip="127.0.0.1" --Port=5010
dotnet swaggerTest.dll --urls="http://localhost:5020" --ip="127.0.0.1" --Port=5020
设置多语言
1.1新建工程Demo.Common.Resource 增加中文和英文的资源文件

如果跨工程使用 需要建立一个对应的Common类
1.2 在Configure种增加多语言的中间件
var suppottedCultures = new[] { "zh", "en" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(suppottedCultures[0])
.AddSupportedCultures(suppottedCultures)
.AddSupportedUICultures(suppottedCultures);
app.UseRequestLocalization(localizationOptions);
1.3 在需要使用多语言地方 注入
IStringLocalizer<Common.Resource.Common> localozer
使用方式
_localozer["Hello"];

浙公网安备 33010602011771号