using System; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs; using Volo.Abp.Mapperly; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; using Volo.Abp.VirtualFileSystem; using Volo.Blogging.Bundling; using Volo.Blogging.Files; using Volo.Blogging.Localization; namespace Volo.Blogging { [DependsOn( typeof(BloggingApplicationContractsModule), typeof(AbpAspNetCoreMvcUiBootstrapModule), typeof(AbpAspNetCoreMvcUiBundlingModule), typeof(AbpMapperlyModule) )] public class BloggingWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { context.Services.PreConfigure(options => { options.AddAssemblyResource( typeof(BloggingResource), typeof(BloggingWebModule).Assembly, typeof(BloggingApplicationContractsModule).Assembly ); }); PreConfigure(mvcBuilder => { mvcBuilder.AddApplicationPartIfNotExists(typeof(BloggingWebModule).Assembly); }); } public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddMapperlyObjectMapper(); Configure(options => { options.FileSets.AddEmbedded(); }); Configure(options => { options .Extensions() .Add(); options .Extensions() .Add(); }); Configure(options => { options.ConstraintMap.Add("blogNameConstraint", typeof(BloggingRouteConstraint)); }); Configure(options => { var bundlingOptions = context.Services.GetRequiredService>().Value; if (bundlingOptions.Mode != BundlingMode.None) { options.IgnoredPaths.Add(bundlingOptions.BundleFolderName); } options.IgnoredPaths.AddRange(new[] { "error", "ApplicationConfigurationScript", "ServiceProxyScript", "Languages/Switch", "ApplicationLocalizationScript", "members" }); }); Configure(options => { var urlOptions = context.Services .GetRequiredServiceLazy>() .Value.Value; var routePrefix = urlOptions.RoutePrefix; if (urlOptions.SingleBlogMode.Enabled) { options.Conventions.AddPageRoute("/Blogs/Posts/Index", routePrefix); options.Conventions.AddPageRoute("/Blogs/Posts/Detail", routePrefix + "{postUrl}"); options.Conventions.AddPageRoute("/Blogs/Posts/Edit", routePrefix + "posts/{postId}/edit"); options.Conventions.AddPageRoute("/Blogs/Posts/New", routePrefix + "posts/new"); } else { if (!routePrefix.IsNullOrWhiteSpace()) { options.Conventions.AddPageRoute("/Blogs/Index", routePrefix); } options.Conventions.AddPageRoute("/Blogs/Posts/Index", routePrefix + "{blogShortName:blogNameConstraint}"); options.Conventions.AddPageRoute("/Blogs/Posts/Detail", routePrefix + "{blogShortName:blogNameConstraint}/{postUrl}"); options.Conventions.AddPageRoute("/Blogs/Posts/Edit", routePrefix + "{blogShortName}/posts/{postId}/edit"); options.Conventions.AddPageRoute("/Blogs/Posts/New", routePrefix + "{blogShortName}/posts/new"); } options.Conventions.AddPageRoute("/Blogs/Members/Index", routePrefix + "members/{userName}"); }); Configure(options => { options.DisableModule(BloggingRemoteServiceConsts.ModuleName); }); Configure(options => { options.ConventionalControllers.FormBodyBindingIgnoredTypes.Add(typeof(FileUploadInputDto)); }); } } }