.NetCore 下開發獨立的(RPL)含有界面的組件包 (六)實現業務功能

.NetCore 下開發獨立的(RPL)含有界面的組件包 (一)準備工做 javascript

.NetCore 下開發獨立的(RPL)含有界面的組件包 (二)擴展中間件及服 務html

.NetCore 下開發獨立的(RPL)含有界面的組件包 (三)構建界面 java

.NetCore 下開發獨立的(RPL)含有界面的組件包 (四)受權過濾 數據庫

.NetCore 下開發獨立的(RPL)含有界面的組件包 (五)受權過濾參數處 理安全

.NetCore 下開發獨立的(RPL)含有界面的組件包 (六)實現業務功能 ui

這裏們來作一個簡單的業務列表功能,這裏我就先來作一個Cient列表this

一如以往,先添加頁面spa

固然須要在界面上寫上咱們的列表語法,razorview會處理@符號的後臺代碼,這裏咱們制定了咱們的數據源是dataSoure,固然這裏是會報錯的,可是不要緊,由於最後執行都是ClientsIndex.Designer.cs類code

 @foreach (var item in dataSource)
                {
                    <tr>
                        <td>
                            <div class="layui-unselect layui-form-checkbox" lay-skin="primary" data-id='@item.ClientId'><i class="layui-icon">&#xe605;</i></div>
                        </td>
                        <td>@item.ClientName</td>
                       

                        <td class="td-manage">
                            <a href="javascript:;" title="編輯" ><i class="layui-icon">   </i>編輯</a>
                            <a href="javascript:;" title="刪除" ><i class="layui-icon">   </i>刪除</a>
                            
                           
                        </td>
                    </tr>
                }

運行命令 dotnet razorpagegenerator IdentityServer4.AdminChina 生成下視圖orm

能夠看到生成是視圖代碼,淡然這裏的dataSource是找不到的,能夠在視圖上加上一些命名空間的引用以及寫好的服務的操做代碼,後面就不須要在視圖類中去修改了

  foreach (var item in dataSource)
                {

#line default
#line hidden
            WriteLiteral("                    <tr>\r\n                        <td>\r\n                            <div class=\"layui-unselect layui-form-checkbox\" lay-skin=\"primary\" data-id=\'");
#line 56 "ClientsIndex.cshtml"
                                                                                                   Write(item.ClientId);

#line default
#line hidden
            WriteLiteral("\'><i class=\"layui-icon\">&#xe605;</i></div>\r\n                        </td>\r\n                        <td>");
#line 58 "ClientsIndex.cshtml"
                       Write(item.ClientName);

#line default
#line hidden
            WriteLiteral(@"</td>
                       

                        <td class=""td-manage"">
                            <a href=""javascript:;"" title=""編輯"" ><i class=""layui-icon"">   </i>編輯</a>
                            <a href=""javascript:;"" title=""刪除"" ><i class=""layui-icon"">   </i>刪除</a>
                            
                           
                        </td>
                    </tr>
");

下面就們就來爲咱們的dataSource作準備了

構建服務相關類

接口中定義個獲取數據的方法

public interface ICustomClientServies
    {
        List<ClientModel> GetClients();
    }
 public class CustomClientServies : ICustomClientServies
    {
        //private readonly XXXDbContext _dbContext
        //public CustomClientServies(XXXDbContext dbContext)
        //{
        //    _dbContext = dbContext;
        //}
        public List<ClientModel> GetClients()
        {
            return new List<ClientModel>
            {
                new ClientModel{ ClientId=1, ClientName="Implicit" },
                 new ClientModel{ ClientId=2,ClientName="Hybrid" },
                  new ClientModel{ClientId=3, ClientName="ClientCredintials" },
                   new ClientModel{ClientId=4, ClientName="AuthorizationCode" },
            };
        }
    }

這裏實現我就不操做數據庫了,若是須要操做數據庫或者使用IdentityServer4的上下文對象都是能夠的,如上面註釋部分同樣,這裏添加幾條模擬數據,寫了這些還不夠,咱們還須要將咱們的Client服務DI

因此這裏咱們還須要擴展IServiceCollection對象,這裏咱們在擴展類中添加這個擴展,淡然你也能夠寫對IIdentityServerBuilder(IdentityServer4)的擴展

 public static IServiceCollection AddAdminChina(this IServiceCollection services)
        {
            services.AddScoped<ICustomClientServies, CustomClientServies>();
            return services;
        }

接下來咱們來視圖類中處理咱們的服務類,說到這裏咱們來看下BaseView這個視圖基類裏面都有什麼?

 protected HttpContext Context { get; private set; }

        /// <summary>
        /// The request
        /// </summary>
        protected HttpRequest Request { get; private set; }

        /// <summary>
        /// The response
        /// </summary>
        public HttpResponse Response { get; private set; }

下面這三個對象都是BaseView提供給咱們的,而咱們的視圖類繼承了這個基類,因此能夠想到從RequestServices拿到服務就垂手可得了,接下來修改代碼,在視圖類中添加對datasource的構造,這樣數據就應該沒有問題了,我種類就寫一個列表了,固然若是你要分頁,接受參數 ,判斷 獲取身份信息狀態等等都能搞定,就由於有上面的上個對象,固然若是你中間件獲取了使用用戶的敏感信息,那麼你這個中間件確定就不安全了,好比你獲取access_token之類的操做

 var services = Request.HttpContext.RequestServices.GetService(typeof(ICustomClientServies)) as ICustomClientServies;
            var dataSource = services.GetClients();
 var services = Request.HttpContext.RequestServices.GetService(typeof(ICustomClientServies)) as ICustomClientServies;
            var dataSource = services.GetClients();
            foreach (var item in dataSource)
            {

#line default
#line hidden
                WriteLiteral("                    <tr>\r\n                        <td>\r\n                            <div class=\"layui-unselect layui-form-checkbox\" lay-skin=\"primary\" data-id=\'");
#line 58 "ClientsIndex.cshtml"
                Write(item.ClientId);

#line default
#line hidden
                WriteLiteral("\'><i class=\"layui-icon\">&#xe605;</i></div>\r\n                        </td>\r\n                        <td>");
#line 60 "ClientsIndex.cshtml"
                Write(item.ClientName);

最後一步在中間件中加上咱們的Client視圖路由,這裏就不貼了,而後咱們在WebTest服務中添加服務擴展

 public void ConfigureServices(IServiceCollection services)
        {           
            services.AddAdminChina();
        }

這裏去掉上一篇中的根據參數判斷權限的代碼,實際操做不會這麼處理,畢竟其餘的路由地址不會攜帶這個參數,以及在視圖中添加好咱們的服務用與生成視圖類。還有就是中間件地址須要動態處理,這就很少說了,下面看下實際的效果,訪問咱們的Client管理 列表頁面就出來了

 

好了,關於這塊的就說了,相信寫一個獨立的RPL包應該不是問題了

相關文章
相關標籤/搜索