zoukankan      html  css  js  c++  java
  • ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记

    任务20:Consent Controller Get请求逻辑实现

    接着上一节的思路,实现一下 ConsentController

    根据流程图在构造函数注入 IClientStore,IResourceStore,IIdentityServerInteractionService

    构造函数

    private readonly IClientStore _clientSotre;
    private readonly IResourceStore _resourceStore;
    private readonly IIdentityServerInteractionService _identityServerInteractionService;
    
    private ConsentController(
        IClientStore clientStore,
        IResourceStore resourceStore,
        IIdentityServerInteractionService identityServerInteractionService)
    {
        _clientSotre = clientStore;
        _resourceStore = resourceStore;
        _identityServerInteractionService = identityServerInteractionService;
    }
    

    Index

    public IActionResult Index(string returnUrl)
    {
        var model = BuildConsentViewModel(returnUrl);
    
        if (model == null)
        {
    
        }
    
        return View(model);
    }
    

    BuildConsentViewModel

    private async Task<ConsentViewModel> BuildConsentViewModel(string returnUrl)
    {
        var request = await _identityServerInteractionService.GetAuthorizationContextAsync(returnUrl);
        if (request == null)
            return null;
    
        var client = await _clientSotre.FindEnabledClientByIdAsync(request.ClientId);
        var resources = await _resourceStore.FindEnabledResourcesByScopeAsync(request.ScopesRequested);
    
        return CreateConsentViewModel(request, client, resources);
    }
    

    CreateConsentViewModel

    private ConsentViewModel CreateConsentViewModel(AuthorizationRequest request, Client client, Resources resources)
    {
        var vm = new ConsentViewModel();
        vm.ClientName = client.ClientName;
        vm.ClientLogoUrl = client.LogoUri;
        vm.ClientUrl = client.ClientUri;
        vm.AllowRemeberConsent = client.AllowRememberConsent;
        vm.IdentityScopes = resources.IdentityResources.Select(i => CreateScopeViewModel(i));
        vm.ResourceScopes = resources.ApiResources.SelectMany(i => i.Scopes).Select(x => CreateScopeViewModel(x));
    
        return vm;
    }
    

    在获取 vm.ResourceScopes 的时候我们用到了 SelectMany,如果我们使用 resources.ApiResources.Select 的话,我们会得到一个 List<List>,而我们想要得到的是一个 List,所以通过 SelectMany 会把 List<List> 展开得到里面的每一个 List

    CreateScopeViewModel

    private ScopeViewModel CreateScopeViewModel(IdentityResource identityResource)
    {
        return new ScopeViewModel
        {
            Name = identityResource.Name,
            DisplayName = identityResource.DisplayName,
            Description = identityResource.Description,
            Required = identityResource.Required,
            Checked = identityResource.Required,
            Emphasize = identityResource.Emphasize,
        };
    }
    
    private ScopeViewModel CreateScopeViewModel(Scope scope)
    {
        return new ScopeViewModel
        {
            Name = scope.Name,
            DisplayName = scope.DisplayName,
            Description = scope.Description,
            Required = scope.Required,
            Checked = scope.Required,
            Emphasize = scope.Emphasize,
        };
    }
    

    ConsentViewModel 添加 ClientUrl

    public string ClientUrl { get; set; }
    

    ScopeViewModel 修改字段类型为 bool

    public bool Emphasize { get; set; }
    public bool Required { get; set; }
    

    课程链接

    http://video.jessetalk.cn/course/explore

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

  • 相关阅读:
    $GLOBALS超级全局变量
    归来
    Mscorlib.dll 里的 System.Internal 类是干嘛的?
    Query Composition using Functional Programming Techniques in C# 3.0
    反射之人千万不能错过的 EmitHelper
    给自己的Blog程序添加对Windows Live Writer的支持
    WebService的应用之winform身份验证
    c# static 的全部用法收集整理
    ASP.NET设置网站图标
    C# 2.0 之 static class (转)
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12886040.html
Copyright © 2011-2022 走看看