1.Startup.cs代码
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using Qhbx.Information.DataSync.Core;
using Qhbx.Information.DataSync.Entities;
using Qhbx.Information.DataSync.Web.Middleware;
using Qhbx.Information.DataSync.Web.Models;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace Qhbx.Information.DataSync.Web
{
public class Startup
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="configuration"></param>
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
/// <summary>
/// 配置实体
/// </summary>
public IConfiguration Configuration { get; }
/// <summary>
/// 配置服务
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
//注册Jwt配置信息到容器
services.Configure<JwtSettings>(Configuration.GetSection("JwtSettings"));
var _connectionString = Configuration.GetConnectionString("Default");
services.AddDbContext<DbContext, DefaultDbContext>(options =>
{
options.UseMySQL(_connectionString, b => b.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name));
});
//加载Jwt配置信息
var jwtSettings = new JwtSettings();
Configuration.Bind("JwtSettings", jwtSettings);
services.AddAuthentication(options =>
{
//认证配置
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
//jwt配置
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,//是否验证Issuer
ValidateAudience = true,//是否验证Audience
ValidateLifetime = true,//是否验证失效时间
ValidateIssuerSigningKey = true,//是否验证SecurityKey
ValidAudience = jwtSettings.Audience,//Audience
ValidIssuer = jwtSettings.Issuer,//Issuer,这两项和前面签发jwt的设置一致
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SecretKey))//拿到SecurityKey
};
});
services.AddCustomService("Qhbx.Information.DataSync.Services");
services.AddControllers();
//配置Swagger
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo()
{
Title = $"农产品设施基地追溯系统",
Version = "V1.0",
Description = "农产品设施基地追溯接口文档"
});
//添加Bearer验证
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = "请输入Token,格式:Bearer {token}",
Name = "Authorization",
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
});
options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement()
{
{
new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
{
Reference = new Microsoft.OpenApi.Models.OpenApiReference(){Type=Microsoft.OpenApi.Models.ReferenceType.SecurityScheme, Id="Bearer"}
},
new List<string>()
}
});
options.ResolveConflictingActions(des => des.First());
options.IncludeXmlComments(@"Qhbx.Information.DataSync.Web.xml", true);
options.IncludeXmlComments(@"Qhbx.Information.DataSync.Entities.xml", true);
options.IncludeXmlComments(@"Qhbx.Information.DataSync.Models.xml", true);
});
services.AddHttpClient();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(next => new RequestDelegate(
async context =>
{
context.Request.EnableBuffering();
await next.Invoke(context);
}
));
app.UseCustomException();
app.UseAuthentication();
app.UseCors(configure =>
{
configure.AllowAnyHeader();
configure.AllowAnyOrigin();
configure.AllowAnyMethod();
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
//配置Swagger
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.DocumentTitle = "综合信息服务接口文档";
options.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None); //控制显示折叠
options.EnableFilter(""); //显示列表过滤
options.DisplayRequestDuration(); //显示请求时间
options.ShowExtensions();
options.SwaggerEndpoint($"/swagger/v1/swagger.json", "V1.0");
});
}
}
}
2.Program.cs代码
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;
using NLog.Web;
using Microsoft.Extensions.Configuration;
namespace Qhbx.Information.DataSync.Web
{
public class Program
{
//public static void Main(string[] args)
//{
// CreateWebHostBuilder(args).Build().Run();
//}
//public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// WebHost.CreateDefaultBuilder(args)
// .UseStartup<Startup>();
/// <summary>
/// 程序入口
/// </summary>
/// <param name="args"></param>
public static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
private static IHostBuilder CreateHostBuilder(string[] args)
{
//var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
//.AddJsonFile("host.json")
//.Build();
//var url = configuration["url"];
var host = Host.CreateDefaultBuilder(args);
var isService = args.Contains("--service") || args.Contains("-s");
if (isService)
{
args = args.Where(d => d != "--service" && d != "-s").ToArray();
var rootPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
Directory.SetCurrentDirectory(rootPath);
host.UseWindowsService().UseSystemd();
}
host.ConfigureWebHostDefaults(webBuilder =>
{
//webBuilder.UseUrls(configuration["url"]);
webBuilder.UseStartup<Startup>();
webBuilder.UseNLog();
});
return host;
}
}
}
3.windows服务 命令行执行
4.常用windows命令
正式环境记得xml复制到根目录下
a.创建windows服务:sc create InformationAPI binPath=“C:\inetpub\wwwroot\InformationAPI\Core31-API\Qhbx.Information.DataSync.Web.exe -s --urls=http://0.0.0.0:9199” displayName=“InformationAPI” start=auto
sc create InformationAPI binPath=“D:\www\InformationApi\Core31-API\Qhbx.Information.DataSync.Web.exe -s --urls=http://0.0.0.0:9104” displayName=“InformationAPI” start=auto
(-s:以服务方式启动。 -urls: 指定端口号 。 )
b.启动Windows服务:sc start InformationAPI
c.停止Windows服务:sc stop InformationAPI
d.删除Windows服务:sc delete InfoemationAPI