Esempio n. 1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public virtual void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCompression();

            #region CORS setup

            services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
            {
                builder
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials()
                .AllowAnyOrigin()
                .WithOrigins(
                    "http://localhost:4200",
                    "http://localhost:3000",
                    "https://piti-react-test.herokuapp.com",
                    "https://footballpitiangular.herokuapp.com",
                    "https://top-squad.herokuapp.com");
            }));

            #endregion

            // Add framework services.

            services.AddControllers()
            .AddNewtonsoftJson(options =>
                               options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

            #region OData

            services.AddOData();

            //Added for compatibility with OData and Swagger
            services.AddMvcCore(options =>
            {
                foreach (var outputFormatter in options.OutputFormatters.OfType <ODataOutputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
                {
                    outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
                }
                foreach (var inputFormatter in options.InputFormatters.OfType <ODataInputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
                {
                    inputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
                }
            });

            #endregion

            services.AddSignalR();

            services.AddHttpClient();

            services.Configure <AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options));

            ServiceConfiguration.ConfigureAPIServices(services, Configuration);

            //Since the filters will be used as a ServiceType (Because they use DI), the different custom filters need to be registered with the framework IoC.
            //If the action filters were used directly, this would not be required.
            services.AddScoped <AuthorizationRequiredAttribute>();

            //https://miniprofiler.com/dotnet/HowTo/ProfileEFCore
            services.AddMiniProfiler(options =>
                                     options.RouteBasePath = "/profiler"
                                     ).AddEntityFramework();

            // Inject an implementation of ISwaggerProvider with defaulted settings applied
            // https://docs.microsoft.com/en-us/aspnet/core/tutorials/getting-started-with-swashbuckle?view=aspnetcore-2.1
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo()
                {
                    Title       = "Football API specification",
                    Description = ""
                });
                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);
            });
        }