.net Core 一些实用方法

统一增加路由前缀

1.1 创建RouteConvention类继承IApplicationModelConvention

public class RouteConvention : IApplicationModelConvention

    {
        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;
                }
            }
        }
    }
1.2 创建一个MvcOptions 的扩展帮助类
        public static void UseCentralRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
        {
            // 添加我们自定义 实现IApplicationModelConvention的RouteConvention
            opts.Conventions.Insert(0, new RouteConvention(routeAttribute));
        }
1.3 在ConfigureServices方法中增加
            services.AddMvc(option => {
                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()
                );
            });
 增加中间件
            app.UseCors(MyAllowSpecificOrigins);
修改 UseEndpoints          
app.UseEndpoints(endpoints =>
            {
                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

设置多语言
   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"];

   

 

   
 
posted @ 2020-06-05 10:29  wujh123  阅读(385)  评论(0)    收藏  举报