diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs index d061904e4c..2c1800f94d 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs +++ b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs @@ -51,7 +51,12 @@ namespace AbpDesk.Web.Mvc //services.Configure(configuration); //Needed when we use Volo.Abp.Identity.HttpApi.Client - services.AddMvc().AddViewLocalization(); //TODO: Move to AbpAspNetCoreMvcModule! + services.AddMvc() //TODO: Move to AbpAspNetCoreMvcModule! + .AddViewLocalization() + .AddRazorPagesOptions(options => + { + options.Conventions.AuthorizeFolder("/App"); + }); services.AddAssemblyOf(); diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml b/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml index b3622ddd2d..f289593b38 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml +++ b/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml @@ -1,5 +1,6 @@ @page -@model AbpDesk.Web.Mvc.Pages.Tickets.IndexModel +@using AbpDesk.Web.Mvc.Pages.App.Tickets +@model AbpDesk.Web.Mvc.Pages.App.Tickets.IndexModel @section styles { diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml.cs b/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml.cs index ea36049149..00ee5c14d9 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml.cs +++ b/src/AbpDesk/AbpDesk.Web.Mvc/Pages/App/Tickets/Index.cshtml.cs @@ -2,11 +2,11 @@ using System.Threading.Tasks; using AbpDesk.Tickets; using AbpDesk.Tickets.Dtos; -using Microsoft.AspNetCore.Mvc.RazorPages; +using Volo.Abp.AspNetCore.Mvc.RazorPages; -namespace AbpDesk.Web.Mvc.Pages.Tickets +namespace AbpDesk.Web.Mvc.Pages.App.Tickets { - public class IndexModel : PageModel + public class IndexModel : AbpPageModel { public IReadOnlyList Tickets { get; set; } @@ -19,6 +19,7 @@ namespace AbpDesk.Web.Mvc.Pages.Tickets public async Task OnGetAsync(GetAllTicketsInput input) { + var uow = CurrentUnitOfWork; var result = await _ticketAppService.GetAll(input); Tickets = result.Items; } diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/RazorPages/AbpPageModel.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/RazorPages/AbpPageModel.cs new file mode 100644 index 0000000000..eec6fcf081 --- /dev/null +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/RazorPages/AbpPageModel.cs @@ -0,0 +1,26 @@ +using System; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Guids; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; + +namespace Volo.Abp.AspNetCore.Mvc.RazorPages +{ + public abstract class AbpPageModel : PageModel + { + public IUnitOfWorkManager UnitOfWorkManager { get; set; } + + public IObjectMapper ObjectMapper { get; set; } + + public IGuidGenerator GuidGenerator { get; set; } + + public ILoggerFactory LoggerFactory { get; set; } + + protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current; + + protected ILogger Logger => _lazyLogger.Value; + private Lazy _lazyLogger => new Lazy(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); + } +} diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs index 2bb1ade246..2075bd600b 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs @@ -45,6 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow var options = CreateOptions(context, unitOfWorkAttr); + //Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware if (_unitOfWorkManager.TryBeginReserved(UnitOfWorkReservationName, options)) { var result = await next(); @@ -56,6 +57,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow return; } + //Begin a new, independent unit of work using (var uow = _unitOfWorkManager.Begin(options)) { var result = await next();