1-定义一个从前台传到后台的viewModel

namespace MvcCookieAuthSample.Models
{public class InputConsentViewModel{public string Button { get; set; }public IEnumerable<string> ScopesConsented { get; set; }public bool RemeberConsent { get; set; }public string ReturnUrl { get; set; }}
}

2-确定逻辑实现

        [HttpPost]public async Task<IActionResult> Index(InputConsentViewModel viewModel){ConsentResponse consentResponse = null;if (viewModel.Button == "no"){consentResponse = ConsentResponse.Denied;}else if (viewModel.Button == "yes"){if(viewModel.ScopesConsented!=null && viewModel.ScopesConsented.Any()){consentResponse = new ConsentResponse {ScopesConsented=viewModel.ScopesConsented,RememberConsent = viewModel.RemeberConsent};}}if (consentResponse != null){var request = await _identityServerInteractionService.GetAuthorizationContextAsync(viewModel.ReturnUrl);await _identityServerInteractionService.GrantConsentAsync(request, consentResponse);return  Redirect(viewModel.ReturnUrl);}return View();}

3-前台consent/index.cshtml

@using MvcCookieAuthSample.ViewModel;
@model ConsentViewModel<div class="row page-header"><div class="col-sm-10">@if (string.IsNullOrWhiteSpace(Model.ClientLogUrl)){<div><img src="@Model.ClientLogUrl" /></div>}<h1>@Model.ClientName<small>希望使用你的账号</small></h1></div></div><div class="row"><form method="post" asp-route-ReturnUrl="@Model.ReturnUrl">@if (Model.IdentityScopes.Any()){<div class="panel"><div class="panel-heading"><span class="glyphicon glyphicon-tasks"></span>identity应用权限</div><ul class="list-group">@foreach (var scope in Model.IdentityScopes){                      @await Html.PartialAsync("_ScopeListItem", scope);}</ul></div>}@if (Model.ResourceScopes.Any()){<div class="panel"><div class="panel-heading"><span class="glyphicon glyphicon-tasks"></span>resource应用权限</div><ul class="list-group">@foreach (var scope in Model.ResourceScopes){await Html.PartialAsync("_ScopeListItem", scope);}</ul></div>}<div><button value="yes" name="button" class="btn btn-primary"  autofocus>同意</button><button value="no" name="button" >取消</button>@if (!string.IsNullOrEmpty(Model.ClientUrl)){<a href="@Model.ClientUrl" class="pull-right btn btn-default"><span class="glyphicon glyphicon-info-sign" ></span><strong>@Model.ClientUrl</strong></a>}</div></form>
</div>

4 _scopeListItem.cshtml

@*For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@
@using MvcCookieAuthSample.ViewModel;
@model ScopeViewModel<li><label><input type="checkbox"name="ScopesConsented"id="scopes_@Model.Name"value="@Model.Name"checked="@Model.Checked"disabled="@Model.Required" />@if (Model.Required){<input type="hidden" name="ScopesConsented" value="@Model.Name"/>}<strong>@Model.Name</strong>@if (Model.Emphasize){<span class="glyphicon glyphicon-exclamation-sign"></span>}</label>@if (string.IsNullOrEmpty(Model.Description)){<div><label for="scopes_@Model.Name"> @Model.Description</label></div>}
</li>

转载于:https://www.cnblogs.com/qinzb/p/9551177.html

22-Consent 确认逻辑实现相关推荐

  1. ASP.NET Core分布式项目实战(Consent 确认逻辑实现)--学习笔记

    任务22:Consent 确认逻辑实现 接下来,我们会在上一节的基础上添加两个按钮,同意和不同意,点击之后会把请求 post 到 ConsentController 处理,如果同意会通过 return ...

  2. ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记

    任务24:集成ASP.NETCore Identity 之前在 Index 页面写了一个 strong 标签,需要加个判断再显示,不然为空没有错误的时候也会显示 @if (!ViewContext.M ...

  3. LVM逻辑卷、卷组的新建及调整

    LVM逻辑卷 练习:关闭虚拟机,添加一场80G 的硬盘,划分3个主分区,1个扩展分区,3个逻辑分区,每个分区10G 传统分区的局限性:1)分区容量调整不方便 2)单个分区的总大小有限 LVM逻辑卷(L ...

  4. 管理员技术(六): 硬盘分区及格式化、 新建一个逻辑卷、调整现有磁盘的分区、扩展逻辑卷的大小、添加一个swap分区...

    一.硬盘分区及格式化 问题: 本例要求熟悉硬盘分区结构,使用fdisk分区工具在磁盘 /dev/vdb 上按以下要求建立分区: 1> 采用默认的 msdos 分区模式         2> ...

  5. 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断

    https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...

  6. RabbitMq(十三)消息发送确认与回调机制

    在rabbitmq中如何确认消息发送到交换机上以及是否正常交换机转发到消息队列上,在rabbitmq上均有其确认实现接口. confirm-callback :消息确认机制,也就是消息是否正常发送到交 ...

  7. linux系统创建lvm卷,Linux逻辑卷LVM实现

    使用同样的方法分了4个分区,结果如图: 准备好分区后,开始制作LVM,第一步就是将这些分区或者磁盘做成物理卷,命令:pvcreate /dev/sd{b,c1,d1,e1} 然后使用pvs命令或者pv ...

  8. 主分区、扩展分区、逻辑分区

    一.主分区.扩展分区和逻辑分区 1.概念 主分区:也叫引导分区,最多能创建4个,最少有1个,当主分区创建了4个后,主分区和扩展分区就没有存在于这个世界上的理由了. 扩展分区:最多一个.严格意义上来讲它 ...

  9. VueDemo-21 确认订单

    21.确认订单 21.1 添加确认订单的页面 // src/views/order/index.vue <template><div class="box"> ...

  10. linux操作系统比较完善的LVM逻辑卷管理——筑梦之路

    基本概念介绍: PV(物理卷): 物理卷在逻辑卷管理中处于最底层,它可以是物理硬盘上的分区,也可以是一整块硬盘 VG(卷组): 卷组建立在物理卷之上,一个卷组中至少要包含一个物理卷,在卷组建立之后可以 ...

最新文章

  1. 在一个有返回值的方法中,用block回传的解决方法
  2. 《易学C++(第2版)》——2.4 Visual C++ 6.0的使用
  3. 字符串的模式匹配--BF算法KMP算法
  4. JavaScript文本特效实例小结【3个示例】
  5. flink Datastream组装
  6. Java 并发编程CyclicBarrier的应用与源码解析(基于ReentrantLock实现)
  7. java 产生随机数_java生成随机数
  8. 戏说前端 JavaScript 之『防抖节流』基础知识
  9. mscaffe 训练minist数据
  10. java毕业设计开题报告论文基于JavaWeb项目实现的高校学生在线选课系统
  11. 一键切换网卡ip v1.0
  12. Spring5全面详解
  13. 安徽宣城职业技术学院引入USB Server远程管理加密狗
  14. 互联网晚报 | 1月10日 星期一 | 天猫年货节正式开启;哪吒汽车第10万台量产车下线;三星永久关闭Tizen应用商店...
  15. python随机猜数字游戏_python,random随机数,简单的python猜数字游戏
  16. 炫酷的 loding效果(canvas)
  17. 在PrimeFaces中更改主题
  18. (转)案例分析:中介提供的二手房合同不规范催生大量房屋买卖纠纷
  19. 【踩坑实录】Mission planner+Ardupilot飞控固件配置教程
  20. TextCnn原理及实践

热门文章

  1. jsp登录并实现邮箱激活功能
  2. 360校招笔试题总结1
  3. 黑马程序员前端JavaScript高级——ES6学习笔记
  4. php大道至简之框架
  5. 每天学命令get_property
  6. PyCharm下载及安装教程(Windows)
  7. linux临时文件放哪,如何保障Linux的临时文件安全?
  8. 【CodeForces 767C】Garland (树形DP)
  9. amd服务器cpu性能排行榜,AMD 32核服务器CPU完胜Intel 22核顶级CPU
  10. c语言台阶,关于C语言跳台阶问题的解决方法