/// <summary> /// Configures built-in .NET Core MVC (things like middleware, routing). Most of this configuration can be adjusted for the developers' need. /// Before calling .AddJsonApi(), a developer can register their own implementation of the following services to customize startup: /// <see cref="IResourceGraphBuilder"/>, <see cref="IServiceDiscoveryFacade"/>, <see cref="IJsonApiExceptionFilterProvider"/>, /// <see cref="IJsonApiTypeMatchFilterProvider"/> and <see cref="IJsonApiRoutingConvention"/>. /// </summary> public void ConfigureMvc(Type dbContextType) { RegisterJsonApiStartupServices(); var intermediateProvider = _services.BuildServiceProvider(); _resourceGraphBuilder = intermediateProvider.GetRequiredService <IResourceGraphBuilder>(); _serviceDiscoveryFacade = intermediateProvider.GetRequiredService <IServiceDiscoveryFacade>(); _dbContextType = dbContextType; AddResourceTypesFromDbContext(intermediateProvider); var exceptionFilterProvider = intermediateProvider.GetRequiredService <IJsonApiExceptionFilterProvider>(); var typeMatchFilterProvider = intermediateProvider.GetRequiredService <IJsonApiTypeMatchFilterProvider>(); var routingConvention = intermediateProvider.GetRequiredService <IJsonApiRoutingConvention>(); _mvcBuilder.AddMvcOptions(options => { options.EnableEndpointRouting = true; options.Filters.Add(exceptionFilterProvider.Get()); options.Filters.Add(typeMatchFilterProvider.Get()); options.Filters.Add(new ConvertEmptyActionResultFilter()); options.InputFormatters.Insert(0, new JsonApiInputFormatter()); options.OutputFormatters.Insert(0, new JsonApiOutputFormatter()); options.Conventions.Insert(0, routingConvention); }); if (_options.ValidateModelState) { _mvcBuilder.AddDataAnnotations(); } _services.AddSingleton <IControllerResourceMapping>(routingConvention); }
public static IMvcCoreBuilder AddViews(this IMvcCoreBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDataAnnotations(); AddViewServices(builder.Services); return(builder); }
public static IMvcCoreBuilder AddViews(this IMvcCoreBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.AddDataAnnotations(); AddViewComponentApplicationPartsProviders(builder.PartManager); AddViewServices(builder.Services); return(builder); }
public static IMvcCoreBuilder AddViews( [NotNull] this IMvcCoreBuilder builder, [NotNull] Action <MvcViewOptions> setupAction) { builder.AddDataAnnotations(); AddViewServices(builder.Services); if (setupAction != null) { builder.Services.Configure(setupAction); } return(builder); }
/// <summary> /// Configures built-in ASP.NET Core MVC components. Most of this configuration can be adjusted for the developers' need. /// </summary> public void ConfigureMvc() { _mvcBuilder.AddMvcOptions(options => { options.EnableEndpointRouting = true; options.Filters.AddService <IAsyncJsonApiExceptionFilter>(); options.Filters.AddService <IAsyncQueryStringActionFilter>(); options.Filters.AddService <IAsyncConvertEmptyActionResultFilter>(); ConfigureMvcOptions?.Invoke(options); }); if (_options.ValidateModelState) { _mvcBuilder.AddDataAnnotations(); } }
/// <summary> /// Adds WebApi services to the specified <see cref="IServiceCollection" />. /// </summary> /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param> /// <returns>An <see cref="IMvcBuilder"/> that can be used to further configure the WebApi services.</returns> public static IMvcBuilder AddWebApi(this IServiceCollection services) { if (services == null) { throw new ArgumentNullException("services"); } IMvcCoreBuilder mvcCoreBuilder = services.AddMvcCore(); mvcCoreBuilder.AddApiExplorer(); mvcCoreBuilder.AddAuthorization(); mvcCoreBuilder.AddFormatterMappings(); mvcCoreBuilder.AddDataAnnotations(); mvcCoreBuilder.AddJsonFormatters(); mvcCoreBuilder.AddCors(); //-MvcServiceCollectionExtensions.AddDefaultFrameworkParts(mvcCoreBuilder.PartManager); //-mvcCoreBuilder.AddViews(); //-mvcCoreBuilder.AddRazorViewEngine(); //-mvcCoreBuilder.AddRazorPages(); //-mvcCoreBuilder.AddCacheTagHelper(); return(new MvcBuilder(mvcCoreBuilder.Services, mvcCoreBuilder.PartManager)); }
public static IMvcCoreBuilder AddViews( this IMvcCoreBuilder builder, Action <MvcViewOptions> setupAction) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (setupAction == null) { throw new ArgumentNullException(nameof(setupAction)); } builder.AddDataAnnotations(); AddViewServices(builder.Services); if (setupAction != null) { builder.Services.Configure(setupAction); } return(builder); }
public static IMvcCoreBuilder AddViews([NotNull] this IMvcCoreBuilder builder) { builder.AddDataAnnotations(); AddViewServices(builder.Services); return(builder); }