public YHttpRequestHandler(IYAuthProvider authProvider, IHttpClientFactory httpClientFactory, IOptions <YGraphOptions> graphOptions, IOptions <YHostOptions> apiOptions, IOptions <YMicrosoftIdentityOptions> azureAdOptions) { this.authProvider = authProvider; this.httpClientFactory = httpClientFactory; this.graphOptions = graphOptions.Value; this.apiOptions = apiOptions.Value; this.azureAdOptions = azureAdOptions.Value; }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddControllersAsServices() // Adding option to ignore Null values when sending back JsonResult from any Web Api //.AddJsonOptions(options => //{ // options.JsonSerializerOptions.IgnoreNullValues = true; // options.JsonSerializerOptions.WriteIndented = true; // optin //}) // Adding this option to be able to send back JObjet from any Web Api .AddNewtonsoftJson(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; options.SerializerSettings.Formatting = Formatting.Indented; options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); services.AddHttpClient(); services.AddHttpContextAccessor(); services.AddOptions(); services.AddDistributedMemoryCache(); services.Configure <CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; // consent required options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddSession(option => { option.IdleTimeout = TimeSpan.FromMinutes(45); option.Cookie.IsEssential = true; }); services.Configure <YGraphOptions>(options => Configuration.Bind("Graph", options)); services.Configure <YHostOptions>(options => Configuration.Bind("YgdraServices", options)); services.Configure <YMicrosoftIdentityOptions>(options => Configuration.Bind("AzureAD", options)); // Need an instance to get the scopes... var graphOptions = new YGraphOptions(); Configuration.Bind("Graph", graphOptions); services.AddMicrosoftIdentityWebAppAuthentication(Configuration) .EnableTokenAcquisitionToCallDownstreamApi(graphOptions.GetScopes()) .AddSessionTokenCaches(); services.AddScoped <IYAuthProvider, YAuthProvider>(); services.AddScoped <IYHttpRequestHandler, YHttpRequestHandler>(); services.AddScoped <IYResourceClient, YResourceClient>(); services.AddMicrosoftGraph(Configuration); //services.AddControllersWithViews().AddMicrosoftIdentityUI(); services.AddControllersWithViews(); services.AddRazorPages() .AddMvcOptions(options => { options.ModelBinderProviders.Insert(0, new PolymorphicEntitySourceBinderProvider()); options.ModelBinderProviders.Insert(0, new PolymorphicDataSourceViewModelBinderProvider()); var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI(); services.AddControllers(); var signalROptions = new YSignalROptions(); Configuration.Bind("SignalR", signalROptions); services.AddSignalR().AddAzureSignalR(options => { options.ConnectionString = signalROptions.ConnectionString; options.ServerStickyMode = ServerStickyMode.Required; }); }