Будучи относительно новым для ASP.NET Core и Razor Pages, я все еще пытаюсь ознакомиться с наилучшим подходом к обработке определенной логики.
У меня есть модель, которая включает в себя все свойства или модели, которые я бы хотел, чтобы они были легко доступны на каждой странице бритвы.
Как сейчас, у меня есть модель в памяти под названием CurrentEnvironment
с несколькими свойствами и объектами, к которым я буду обращаться с разных страниц.
Текущая среда Фрагмент:
public class CurrentEnvironment {
public string Url {get;set;}
public string IPAddress {get;set;}
Public AppUser User {get;set;}\
//.....
}
Каждая страница Razor реализует BasePageModel
, которая сама реализует PageModel
. Если страница требует аутентификации, то существует SecurePageModel
с фильтром [Authorize]
, который реализует BasePageModel
BasePageModel
public CurrentEnvironment CurrentEnvironment { get; set; } = new CurrentEnvironment();
public override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
CurrentEnvironment.IPAddress = context.HttpContext.Connection.RemoteIpAddress?.ToString();
CurrentEnvironment.Url = context.HttpContext.Request.GetDisplayUrl();
return base.OnPageHandlerExecutionAsync(context, next);
}
SecurePageModel фрагмент:
[Authorize]
public class SecurePageModelAsync : BasePageModelAsync
{
//......
public override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
CurrentEnvironment.User = _userManager.GetUserAsync(HttpContext.User).Result;
return base.OnPageHandlerExecutionAsync(context, next);
}
}
Мой вопрос (ы):
- Есть ли лучший способ справиться с этим и дать такие же результаты?
- Наверное, я хочу создать сервис для обработки
CurrentEnvironment
, может быть? Если так, как бы я заполнил сервис? Промежуточное?