// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <ApiBehaviorOptions>(op => { op.SuppressModelStateInvalidFilter = true; }); services.AddDbContext <MinhasTarefasContext>(op => { op.UseSqlite("Data Source=Database\\MinhasTarefas.db"); }); services.AddScoped <IUsuarioRepository, UsuarioRepository>(); services.AddScoped <ITarefasRepository, TarefasRepository>(); services.AddScoped <ITokenRepository, TokenRepository>(); services.AddIdentity <AplicationUser, IdentityRole>() .AddEntityFrameworkStores <MinhasTarefasContext>() .AddDefaultTokenProviders(); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; } ).AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("chave-api-jwt-minhas-tarefas")), }; }); services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme). RequireAuthenticatedUser() .Build()); } ); services.ConfigureApplicationCookie(options => { options.Events.OnRedirectToLogin = context => { context.Response.StatusCode = 401; return(Task.CompletedTask); }; }); services.AddMvc(config => { config.ReturnHttpNotAcceptable = true; config.InputFormatters.Add(new XmlSerializerInputFormatter(config)); config.OutputFormatters.Add(new XmlSerializerOutputFormatter()); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions( options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); services.AddSwaggerGen(cfg => { cfg.AddSecurityDefinition("Bearer", new ApiKeyScheme() { In = "header", Type = "apiKey", Description = "Adicione o JSON Web Token(JWT) para autentificar", Name = "Authorization" }); var security = new Dictionary <string, IEnumerable <string> >() { { "Bearer", new string [] { } } }; cfg.AddSecurityRequirement(security); cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());; cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info() { Title = "Minhas Tarefas API - V1.0", Version = "v1.0" }); var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath; var NomeProjeto = $"{PlatformServices.Default.Application.ApplicationName}.xml"; var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto); cfg.IncludeXmlComments(CaminhoProjetoXmlComentario); cfg.DocInclusionPredicate((docName, apiDesc) => { var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion(); if (actionApiVersionModel == null) { return(true); } if (actionApiVersionModel.DeclaredApiVersions.Any()) { return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName)); } return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName)); }); cfg.OperationFilter <ApiVersionOperationFilter>(); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure <ApiBehaviorOptions>(op => { op.SuppressModelStateInvalidFilter = true; }); #region AutoMapper-Config var config = new MapperConfiguration(op => { op.AddProfile(new DTOMapperProfile()); }); IMapper mapper = config.CreateMapper(); services.AddSingleton(mapper); #endregion services.AddMvc(op => { //op.ReturnHttpNotAcceptable = true; //op.InputFormatters.Add(new XmlSerializerInputFormatter(op)); //op.OutputFormatters.Add(new XmlSerializerOutputFormatter()); }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0); //.AddJsonOptions( //options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore // ); services.AddApiVersioning(op => { op.ReportApiVersions = true; op.AssumeDefaultVersionWhenUnspecified = true; op.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0); }); services.AddSwaggerGen(op => { //op.AddSecurityDefinition("Bearer", new ApiKeyScheme() //{ // In = "header", // Type = "apiKey", // Description = "Adicione o JSON web Token(JWT) para autenticar.", // Name = "Authorization" //}); //var security = new Dictionary<string, IEnumerable<string>>() //{ // {"Bearer", new string[] {} } //}; //op.AddSecurityRequirement(security); op.ResolveConflictingActions(ApiDescription => ApiDescription.First()); op.SwaggerDoc("v1", new OpenApiInfo { Version = "v1.0", Title = "Talk To API", Description = "In Talk To API the user can talk with others users" }); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); op.IncludeXmlComments(xmlPath); //op.DocInclusionPredicate((docName, apiDesc) => //{ // var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion(); // if (actionApiVersionModel == null) // { // return true; // } // if (actionApiVersionModel.DeclaredApiVersion.Any()) // { // return actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName); // } // return actionApiVersionModel.implementeApiVersion.Any(v => $"v{v.ToString()}" == docName); //}); }); services.AddIdentity <ApplicationUser, IdentityRole>() .AddEntityFrameworkStores <TalkToContext>().AddDefaultTokenProviders() .AddDefaultTokenProviders(); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Key-Api-Jwt-My-Taks")); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Key-Api-Jwt-My-Taks")) }; }); services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser() .Build() ); }); services.AddIdentityCore <ApplicationUser>().AddEntityFrameworkStores <TalkToContext>(); services.AddControllersWithViews().AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); services.AddScoped <IUserRepository, UserRepository>(); services.AddScoped <ITokenRepository, TokenRepository>(); services.AddScoped <IMessageRepository, MessageRepository>(); services.AddDbContext <TalkToContext>(op => { op.UseSqlite("Data Source=Database\\TalkTo.db"); }); services.AddControllers(); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { var config = new MapperConfiguration(cfg => { cfg.AddProfile(new DTOMapperProfile()); }); IMapper mapper = config.CreateMapper(); services.AddSingleton(mapper); services.AddDbContext <MimicContext>(opt => { opt.UseSqlite("Data Source = DataBases\\Mimic.db"); } ); services.AddMvc(); services.AddScoped <IPalavraRepository, PalavraRpository>(); services.AddApiVersioning ( cfg => { cfg.ReportApiVersions = true; //cfg.ApiVersionReader = new HeaderApiVersionReader("api-version"); cfg.AssumeDefaultVersionWhenUnspecified = true; cfg.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0); } ); services.AddSwaggerGen(cfg => { cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());; cfg.SwaggerDoc("v2.0", new Swashbuckle.AspNetCore.Swagger.Info() { Title = "MimicAPI - V2.0", Version = "v2.0" }); cfg.SwaggerDoc("v1.1", new Swashbuckle.AspNetCore.Swagger.Info() { Title = "MimicAPI - V1.1", Version = "v1.1" }); cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info() { Title = "MimicAPI - V1.0", Version = "v1.0" }); var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath; var NomeProjeto = $"{PlatformServices.Default.Application.ApplicationName}.xml"; var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto); cfg.IncludeXmlComments(CaminhoProjetoXmlComentario); cfg.DocInclusionPredicate((docName, apiDesc) => { var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion(); if (actionApiVersionModel == null) { return(true); } if (actionApiVersionModel.DeclaredApiVersions.Any()) { return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName)); } return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName)); }); cfg.OperationFilter <ApiVersionOperationFilter>(); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { var config = new MapperConfiguration(cfg => { cfg.AddProfile(new DTOMapperProfile()); }); IMapper mapper = config.CreateMapper(); services.AddSingleton(mapper); services.AddDbContext <TalkToContext>(cfg => { cfg.UseSqlite("Data Source=TalkTo.db"); }); //services.AddDbContext<TalkToContext>(options => options.UseInMemoryDatabase(databaseName: "DbControle")); services.AddScoped <IUsuarioRepository, UsuarioRepository>(); services.AddScoped <ITokenRepository, TokenRepository>(); services.AddScoped <IMensagemRepository, MensagemRepository>(); services.Configure <ApiBehaviorOptions>(op => { op.SuppressModelStateInvalidFilter = true; }); services.AddIdentity <ApplicationUser, IdentityRole>(options => { options.Password.RequireDigit = false; options.Password.RequiredLength = 5; options.Password.RequireLowercase = false; options.Password.RequireUppercase = false; options.Password.RequireNonAlphanumeric = false; }) .AddEntityFrameworkStores <TalkToContext>() .AddDefaultTokenProviders(); services.AddCors(cfg => { cfg.AddDefaultPolicy(policy => { policy.WithOrigins("https://localhost:44311") .AllowAnyMethod() .SetIsOriginAllowedToAllowWildcardSubdomains() .AllowAnyHeader(); }); cfg.AddPolicy("AnyOrigin", policy => { policy.AllowAnyOrigin() .WithMethods("GET") .WithHeaders(); }); } ); services.AddMvc(cfg => { cfg.ReturnHttpNotAcceptable = true; cfg.InputFormatters.Add(new XmlSerializerInputFormatter(cfg)); cfg.OutputFormatters.Add(new XmlSerializerOutputFormatter()); var jsonOutputFormatter = cfg.OutputFormatters.OfType <JsonOutputFormatter>().FirstOrDefault(); if (jsonOutputFormatter != null) { jsonOutputFormatter.SupportedMediaTypes.Add(CustomMediaType.Hetoas); } }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions( options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore ); //JWT var key = Encoding.ASCII.GetBytes("chave-api-jwt-talkto"); services.AddAuthentication(opt => { opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(x => { x.RequireHttpsMetadata = true; //apenas https x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = false, ValidateAudience = false, ClockSkew = TimeSpan.Zero }; }); services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser() .Build()); }); services.ConfigureApplicationCookie(options => { options.Events.OnRedirectToLogin = context => { context.Response.StatusCode = 401; return(Task.CompletedTask); }; }); services.AddSwaggerGen(cfg => { cfg.AddSecurityDefinition("Bearer", new ApiKeyScheme() { In = "header", Type = "apiKey", Description = "Adicione o JSON Web Token(JWT) para autentificar", Name = "Authorization" }); var security = new Dictionary <string, IEnumerable <string> >() { { "Bearer", new string [] { } } }; cfg.AddSecurityRequirement(security); cfg.ResolveConflictingActions(ApiDescription => ApiDescription.First());; cfg.SwaggerDoc("v1.0", new Swashbuckle.AspNetCore.Swagger.Info() { Title = "TalkTo API - V1.0", Version = "v1.0" }); var CaminhoProjeto = PlatformServices.Default.Application.ApplicationBasePath; var NomeProjeto = $"{PlatformServices.Default.Application.ApplicationName}.xml"; var CaminhoProjetoXmlComentario = Path.Combine(CaminhoProjeto, NomeProjeto); cfg.IncludeXmlComments(CaminhoProjetoXmlComentario); cfg.DocInclusionPredicate((docName, apiDesc) => { var actionApiVersionModel = apiDesc.ActionDescriptor?.GetApiVersion(); if (actionApiVersionModel == null) { return(true); } if (actionApiVersionModel.DeclaredApiVersions.Any()) { return(actionApiVersionModel.DeclaredApiVersions.Any(v => $"v{v.ToString()}" == docName)); } return(actionApiVersionModel.ImplementedApiVersions.Any(v => $"v{v.ToString()}" == docName)); }); cfg.OperationFilter <ApiVersionOperationFilter>(); }); }