代码之家  ›  专栏  ›  技术社区  ›  Fraze

razor页面中共享模型的最佳实践

  •  0
  • Fraze  · 技术社区  · 6 年前

    对于ASP来说是比较新的。NET核心和Razor页面,我仍在努力熟悉处理某些逻辑的最佳方法。

    我有一个模型,它封装了我希望在每一页上都能找到的每一个属性或模型。

    现在,我有一个内存模型,叫做 CurrentEnvironment 我将从不同的页面访问一些属性和对象。

    当前环境 片段:

    public class CurrentEnvironment {
        public string Url {get;set;}
        public string IPAddress {get;set;}
        Public AppUser User {get;set;}\
        //.....
    }
    

    每一页都实现 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);
        }
    

    安全页面模型 片段:

    [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. 我猜我想创建一个服务来处理 当前环境 大概如果是,我将如何填充服务?中间件?
    0 回复  |  直到 6 年前