做网站会员推广哪个好,无锡自助网站,wordpress必下载工具,咨询公司属于什么行业#xff08;Ant Design of Blazor为努力而生#xff09;书接上文#xff0c;上次我们说到了最终选用Blazor.Server来实现了我们的MVP项目#xff0c;额其实就是博客的增删改查#xff0c;不过运行还是很爽的#xff0c;不过是一个小demo#xff0c;脑子里一直有个声音Ant Design of Blazor为努力而生书接上文上次我们说到了最终选用Blazor.Server来实现了我们的MVP项目额其实就是博客的增删改查不过运行还是很爽的不过是一个小demo脑子里一直有个声音说把Blog.Admin项目给做个Blazor版本以后再说吧一个人毕竟是有限的。这三篇也是上中下了从客户端到服务端最后今天简单说下权限之后可能还是重点说下NetCore的相关内容吧。上周我们虽然已经部署了加载速度也解决了展示也挺好了最后确有一个小问题让我不得不提上日程那就是权限问题因为我增加了新增和修改肯定不能让每个人都处理吧好那咱们就开搞我周六用了一下午的时候研究了下如何加权的问题感觉并不是很满意虽然也可以用希望有借鉴意义。1、Blazor权限控制有哪几种关于Blazor.Server开发中的权限控制呢其实是有三个方向或者说是三个模块的这里简单说一下吧1、对.razor组件的加权我们通过之前的了解已经发现了其实Blazor组件中可以写c#的业务逻辑更像是一个.cs类文件一样所以我们也可以像写类或者方法那样直接加个特性官方也是这么说的page /fetchdata
attribute [Authorize(Roles Admin)]
是不是感觉挺厉害的直接配置然后只要我们的HttpContext中有对应的Claims那就可以访问否则就不能获取指定的内容官方还给来了个组件AuthorizeView RolesUserpYou can only see this if youre in the User role./p
/AuthorizeViewAuthorizeView RolesAdminpYou can only see this if youre in the Admin role./p
/AuthorizeView
看似一切正常的情况下我没有试验成功可能文档看的还是不够这里留个疑问以后有机会学会了再补充下。而且就算是可以的最后会出现另一个问题就是如何和IdentityServer4进行兼容问题毕竟我们的BlogCore资源服务器是基于Ids4验证的????困难总比办法多。所以这种方法暂时搁置是搁置不是放弃。2、通过service服务来控制昨天我们在讲到创建官方Demo的时候看到了Blazor.Server项目其实是可以通过自己建Service服务来进行处理的包括持久化那我们能不能在这里做处理呢这个就更像是我们的NetCore项目了嗯感觉靠谱毕竟轻车熟路可是转念一想我们使用的是第三方的BlogCore的资源服务器呀这里就算加权了但是c#发起HttpClient请求的时候不还是有问题还是需要传递Token么倒不如直接写到.razor里边直接去HttpClient请求第三方资源服务器。而且还是没有解决如何兼容Ids4的问题(⊙﹏⊙)放弃。3、HttpClient直接请求带Token最后我还是介于上边两个方案综合了一个办法投机取巧的方法在.razor中直接用HttpClient去请求Blog.Core的API然后Header中增加Token就行至于这个Token从哪里来有多个方案1、要么写个api传递username和pwd来获取token2、要么直接用个输入框手动输入这个投机方案不提倡但是可以自己玩玩儿。3、写个登录页面最终因为不是很擅长Blazor而且也没有过多的研究最终还是选择的第二种直接手动输入吧。2、HttpClient直接发送Token请求接下来就是很简单的没有啥技术含量了1、编辑表单增加Token输入框 divdiv classform-grouplabel令牌/labelinput bindBlogArticle.Token classform-control //divdiv classform-grouplabel标题/labelinput bindBlogArticle.btitle classform-control //divdiv classform-grouplabel分类/labelinput bindBlogArticle.bcategory classform-control //divdiv classform-grouplabel外链/labelinput bindBlogArticle.bsubmitter classform-control //divdiv classform-grouplabel副标题/labelinput bindBlogArticle.bcontent classform-control //divdiv classform-grouplabel阅读/labelinput bindBlogArticle.btraffic classform-control //divbutton classbtn btn-primary onclickTrySave保存/buttonCancelBtn Name取消/CancelBtn/div
效果是这样的这个Token令牌从哪里来呢很简单我目前是简单写了一个API从Ids4项目生成的然后手动输入的你也可以写个登录页面来获取不要告诉我你还不会通过postman从ids4项目获取token。2、HttpClient添加Header既然要鉴权然后从Blog.Core中获取指定的资源数据那就必须仿照前后端分离项目在Header中添加Authorization信息。 private async Task OnSaveAsync(BlogArticle blogArticle){BlogArticle blogArticle;// 通过双向绑定从子组件中获取token并添加到Header中Http.DefaultRequestHeaders.Add(Authorization, $Bearer {BlogArticle.Token});var result await Http.PostAsJsonAsync(http://apk.neters.club/api/Blog/AddForMVP, BlogArticle);if (result.IsSuccessStatusCode){NavManager.NavigateTo(/blog/list);}else{// 如果失败了必须刷新页面因为这个时候HttpClient已经失效了_errmsg 保存失败! 错误原因 result.ReasonPhrase 。请刷新页面重试;}}除了添加Header以为另一个知识点就是需要刷新页面了这个还是和我们平时访问api还是不一样的就算是你生命周期设置了瞬态也不行services.AddTransientHttpClient();
很值得研究。3、效果预览简单处理了以后就可以看看效果了如果没有登录呢会报错然后输入正确的Token后就可以写入成功了。3、总结说句实话对第三方资源服务器的请求和加权应该有更高级的玩儿法相信社区的小伙伴一起可以集思广益吧未来还是很有希望的。固步自封最终逃不掉失败的命运。