Лучшая практика для общей модели на бритвенных страницах - PullRequest
0 голосов
/ 15 января 2019

Будучи относительно новым для 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);
    }
}

Мой вопрос (ы):

  1. Есть ли лучший способ справиться с этим и дать такие же результаты?
  2. Наверное, я хочу создать сервис для обработки CurrentEnvironment, может быть? Если так, как бы я заполнил сервис? Промежуточное?
...