程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 項目中的web api知識總結,webapi知識總結

項目中的web api知識總結,webapi知識總結

編輯:C#入門知識

項目中的web api知識總結,webapi知識總結


         最近在做公司的項目,自己負責webapi的框架的搭建與開發,最近很忙,一直沒時間對工作中遇到的知識點缺少個總結,現總結一下,對自己是個提升,如果個人的小點點小總結能對博友有幫助那也是善莫大焉.

(1)、 首先說一下c# dynamic,dynamic是FrameWork4.0的新特性.我在api中用了比較多的dynamic,首先個人認為dynamic能使代碼變得優雅,可以省去定義多余的實體,dynamic是運行時決定類型有哪些屬性,包括賦值和取值都可以隨便指定屬性,

例如:

dynamic sourceInfo = SqlDataHelper.GetWebDMDynamicData(sourceIdSql, new {id=3).FirstOrDefault();
                    if (null != sourceInfo)
                    {
                        item.SourceId = sourceInfo.SourceId;
                        item.DocType = sourceInfo.DocType;
                        item.InvestmentType = sourceInfo.InvestmentType;
                    }

以上代碼中sourceInfo指定了dynamic,開發人員知道如果取值成功肯定會有SourceId屬性,所以item.SourceId = sourceInfo.SourceId;賦值就不奇怪了.

同樣如下代碼也可以自己為dynamic隨便指定屬性:

1 dynamic data= null;
2 data= SqlDataHelper.GetWebDMDynamicData(sql, new { Id = id }).ToList().FirstOrDefault();
3 data.a= 124;
4 data.b= "test2";
5 data.c="test3";

可以為dynamic類型data隨便指定屬性,前提條件是在第(2)步驟時data的值不能為空,否則在第(3)步data是null,這時候就會出現空異常.

(2)、再談論一下輕量級的ORM框架,這個框架網上已經充斥了大量的學習資料,本人只是對項目中的使用心得做些概括,不對之處歡迎指正.

        我們知道調用數據庫存儲過程肯定有參數化,dapper提供了一個比較好的參數化對象DynamicParameters,上代碼:

DynamicParameters dynamicParameters = new DynamicParameters();
            dynamicParameters.Add("@p_Id1", id1, DbType.String);
            dynamicParameters.Add("@p_Id2", id2, DbType.Int32);
            dynamicParameters.Add("@p_dateTime", dateTime, DbType.DateTime);
            List<dynamic> info =  conn.Query<T>(storeProcedureName,dynamicParameters, null, true, null, CommandType.StoredProcedure) as List<T>;

        如果要指定執行存儲過程,那麼要指定CommandType.StoredProcedure關鍵字.

 (3)、以下是List<T>轉dataTable的方法,的確為類型轉換省去了好多的代碼,但是也有一個自己花了點時間沒有解決的問題,就是T必須指定實體類型,而不能使用dynamic,否則type.GetProperties

取不到正確的屬性,這樣系統就必須多定義一個實體類傳進來.

 public static DataTable ToDataTable<T>(IList<T> list)
        {
            //create propertyInfo
            List<PropertyInfo> pList = new List<PropertyInfo>();
            //get reflector interface
            Type type = typeof(T);
            DataTable dt = new DataTable();
            //add datatable column
            Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, Nullable.GetUnderlyingType(
            p.PropertyType) ?? p.PropertyType); });
            foreach (var item in list)
            {
                //create new row
                DataRow row = dt.NewRow();
                pList.ForEach(p => row[p.Name] = p.GetValue(item, null)??System.DBNull.Value);
                dt.Rows.Add(row);
            }
            return dt;
        }

好了,以上就是項目中的一些小小的總結,還有一些零碎的知識點不做過多描述了.通過項目過程中還有好多要學習的能力,特別是溝通能力,技術引導業務能力.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved