// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddJsonOptions(option => option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"); //添加ApiContext的注入 services.AddDbContext <ApiContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ApiConnection"), b => b.UseRowNumberForPaging())); //添加AutoMapper var mapperConfig = new MapperConfiguration(cfg => { cfg.AddProfile(new AutoMapperProfileConfiguraion()); }); services.AddSingleton <IMapper>(mapper => mapperConfig.CreateMapper()); //配置Swagger生成帮助文档 services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Version = "v1", Title = "WebFoodbornApi接口文档", Description = "RESTful API for WebFoodbornApi", TermsOfService = "None", Contact = new Contact { Name = "益康软件", Email = "*****@*****.**", Url = "http://www.yygl.com" } }); options.IncludeXmlComments(Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "WebFoodbornApi.XML")); // 注意:此处替换成所生成的XML documentation的文件名。 options.DescribeAllEnumsAsStrings(); options.OperationFilter <HttpHeaderOperation>(); // 添加httpHeader参数 }); //配置跨域 services.AddCors(options => { options.AddPolicy("CorsPolicy", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .WithExposedHeaders("X-TotalCount", "X-TotalPage") .AllowCredentials()); }); //JWT相关 tokenOptions = new JWTTokenOptions() { Issuer = "WebFoodbornApi", // 签发者名称 Audience = "WebFoodbornApi", //使用者名称 Expiration = TimeSpan.FromDays(3), //指定Token过期时间 SecretKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("Jwt")["SecretKey"])), }; services.AddSingleton <JWTTokenOptions>(tokenOptions); var tokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = tokenOptions.SecretKey, ValidateAudience = true, ValidAudience = tokenOptions.Audience, // 设置接收者必须是 WebOppointmentApi ValidateIssuer = true, ValidIssuer = tokenOptions.Issuer, // 设置签发者必须是 WebOppointmentApi ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; //添加JWT身份验证 services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(o => { o.IncludeErrorDetails = true; o.TokenValidationParameters = tokenValidationParameters; o.Events = new JwtBearerEvents() { OnAuthenticationFailed = c => { c.NoResult(); c.Response.StatusCode = 401; c.Response.ContentType = "text/plain"; return(c.Response.WriteAsync(c.Exception.ToString())); } }; }); //鉴权规则设置 //第三方Api调用相关 apiOptions = new FoodBornApiOptions() { HospitalId = Configuration.GetSection("FoodbornApi")["HospitalId"].ToString(), HospitalName = Configuration.GetSection("FoodbornApi")["HospitalName"].ToString(), UserName = Configuration.GetSection("FoodbornApi")["UserName"].ToString(), Version = Configuration.GetSection("FoodbornApi")["Version"].ToString(), SecretKey = Configuration.GetSection("FoodbornApi")["SecretKey"].ToString(), }; services.AddSingleton <FoodBornApiOptions>(apiOptions); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
public PatientController(ApiContext dbContext, IMapper mapper, FoodBornApiOptions apiOptions) { this.dbContext = dbContext; this.mapper = mapper; this.apiOptions = apiOptions; }