小李飞刀传人,创世修罗传全文阅读,h美女游戏
前言
作为 .net 程序员,痛苦之一是自从 asp.net 诞生之日起直到最新的 asp.net core 都无法直接实现跨站登录重定向(比如访问 https://q.cnblogs.com ,跳转到 https://passport.cnblogs.com 进行登录),只能跳转到当前站点。
具体拿 asp.net core 来说就是 cookieauthenticationoptions.loginpath
只能指定路径,不能指定包含主机名的完整 url ,asp.net core 会在重定向时自动加上当前请求的主机名。
services.addauthentication() .addcookie(options => { options.loginpath = "/account/signin"; });
returnurl 查询参数也只会包含路径,不包含完整的 url 。
为了解痛,在 asp.net 时代我们服用的解药要么是不用 asp.net 的登录跳转机制,要么通过专门的 usercontroller.login action 进行二次跳转,在 asp.net core 时代我们改服了 middleware 的解药,在专门的 middleware 中进行跳转(也比较麻烦)。
昨天在阅读了 asp.net core authenticaion 的源码后,我们找到了一种新的解药 —— 修改 cookieauthenticationevents.onredirecttologin
委托实现跨站登录重定向。
以下是新解药制作方法。
在 startup.configureservices 中给 addcookie 添加如下的配置代码以使用修改后的 url 进行重定向:
services.addauthentication() .addcookie(options => { var originredirecttologin = options.events.onredirecttologin; options.events.onredirecttologin = context => { return originredirecttologin(rebuildredirecturi(context)); }; });
rebuildredirecturi 的实现代码如下:
private static redirectcontext<cookieauthenticationoptions> rebuildredirecturi( redirectcontext<cookieauthenticationoptions> context) { if (context.redirecturi.startswith(account_site)) return context; var originuri = new uri(context.redirecturi); var uribuilder = new uribuilder(account_site); uribuilder.path = originuri.absolutepath; var querystrings = queryhelpers.parsequery(originuri.query); var returnurlname = context.options.returnurlparameter; var returnurl = originuri.getcomponents(uricomponents.schemeandserver, uriformat.unescaped) + querystrings[returnurlname]; uribuilder.query = querystring.create(returnurlname, returnurl).tostring(); context.redirecturi = uribuilder.tostring(); return context; }
以上一堆代码用于实现 url 的转换,详见博问 https://q.cnblogs.com/q/108087/
这个长久以来的痛苦总算基于 asp.net core 强大的扩展与配置能力相对优雅地消除了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论