日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)

發布時間:2023/12/13 c/c++ 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

  在上一篇0_MVC+EF+Autofac(dbfirst)輕型項目框架_基本框架中,我已經介紹了這個輕型框架的層次結構,在下面的這篇文章中,我將以教師登陸功能為例,具體來擴充下我的core層的代碼。

  在這之前,我想先補充討論下是否有必要添加server層,因為看過不少別人的框架都有這一層。首先,server層在不同地方有著不同的解釋。有個常聽的詞叫MVSC,這里所指的S雖然也是server的意思,但實現的功能更有點類似于我框架中的core,主要存放也是業務邏輯。但我看了別人框架上的server層,有些甚至已經直接繼承自Controller類,一開始很不解,這樣做讓web層中的Controller顏面何存。但在深入了解了mvc的一些機制后覺得這樣做也有道理(mvc在注冊控制器時是遍歷文件夾中的dll來的),把視圖和控制器存放在了不同的程序集里,便于團隊開發。但有些server層的作用更像是單純為了給web(view)和core解耦或者說是改變依賴關系。具體我還真的沒能力來討論這么做有沒有必要,別人這么做必然有別人的出發點和目的,但在我的輕量架構中還是沒有引入server這個層,因為在一定程度上它只會增加框架整體的復雜性,“輕”還是主基調。

  同樣,文中有問題的地方歡迎批評指正!謝謝!

創建過程

  1.首先數據表結構如下圖

  

  表中ID是教師的GUID,TID才是用來登陸的唯一標示,PID是權限的標示,接下去講權限判斷時將會提到它。

  2.根據數據庫生成edmx在Model層的Entity中

  3.在ICore中創建教師類接口,在Core中創建教師類

  接口中很簡單,就一句話,定義了教師類的接口。

public partial interface ITeacher{}

  在Core中創建一個類用來實現ITeacher接口

public partial class Teacher : BaseCore<Entity.Teacher>, ICore.ITeacher{public Teacher(DbContext dbContext){db = dbContext;}}

  BaseCore是什么?不要驚慌。在上一篇中,我談到了我將不引入DAL層來再次封裝EF,但在EF中,有些操作比較復雜,例如修改刪除等。如果每次使用時都要先查找再修改,要寫很多重復代碼,我的BaseCore是對這些方法的一些封裝,雖然會造成一些代碼的污染,但著實可以少寫不少重復代碼。也許會有人提出異議,這樣的行為是否可以理解成是對EF的封裝?我也不能完全否認,但我更愿意把它理解成業務層對于操作EF的幫助類:

    第一,相對于單獨做一層來看,這樣更“輕”

    第二,這樣做放在業務上也更加合適,例如不需要去考慮“分頁該不該放在DAL?”這類永遠討論不出正確答案的問題

    第三,維護更簡單

    第四,既然是幫助類,那就提供了不用它的可能,覺得不爽不用它就是

  以下是BaseCore的代碼,有點長。幫助類中借鑒了部分他人分享的代碼,實在找不到出處了,這里表示感謝!

1 using System; 2 using System.Collections.Generic; 3 using System.Data.Entity; 4 using System.Data.Entity.Infrastructure; 5 using System.Linq; 6 using System.Linq.Expressions; 7 using System.Reflection; 8 using System.Text; 9 10 namespace EDUA_Core 11 { 12 /// <summary> 13 /// 業務幫助父類 14 /// </summary> 15 /// <typeparam name="T">之類類型</typeparam> 16 public class BaseCore<T> where T : class,new() 17 { 18 /// <summary> 19 /// EF上下文對象 20 /// </summary> 21 protected DbContext db { get; set; } 22 23 #region 1.0新增實體 + void Add(T model) 24 /// <summary> 25 /// 新增實體 26 /// </summary> 27 /// <param name="model">新增的實體</param> 28 protected void Add(T model) 29 { 30 db.Set<T>().Add(model); 31 } 32 #endregion 33 34 #region 1.0.1新增實體并保存 + int AddAndSave(T model) 35 /// <summary> 36 /// 新增實體并保存 37 /// </summary> 38 /// <param name="model">新增的實體</param> 39 /// <returns>受影響的行數</returns> 40 protected int AddAndSave(T model) 41 { 42 Add(model); 43 return db.SaveChanges(); 44 } 45 #endregion 46 47 #region 2.0刪除實體 + void Del(T model) 48 /// <summary> 49 /// 刪除實體 50 /// </summary> 51 /// <param name="model">刪除的實體</param> 52 protected void Del(T model) 53 { 54 db.Set<T>().Attach(model); 55 db.Set<T>().Remove(model); 56 } 57 #endregion 58 59 #region 2.0.1刪除實體并保存 + int DelAndSave(T model) 60 /// <summary> 61 /// 刪除實體并保存 62 /// </summary> 63 /// <param name="model">刪除的實體</param> 64 /// <returns>受影響的行數</returns> 65 protected int DelAndSave(T model) 66 { 67 Del(model); 68 return db.SaveChanges(); 69 } 70 #endregion 71 72 #region 2.1根據條件刪除 + void DelBy(Expression<Func<T, bool>> delWhere) 73 /// <summary> 74 /// 根據條件刪除 75 /// </summary> 76 /// <param name="delWhere">條件</param> 77 protected void DelBy(Expression<Func<T, bool>> delWhere) 78 { 79 //3.1查詢要刪除的數據 80 List<T> listDeleting = db.Set<T>().Where(delWhere).ToList(); 81 //3.2將要刪除的數據 用刪除方法添加到 EF 容器中 82 listDeleting.ForEach(u => 83 { 84 db.Set<T>().Attach(u);//先附加到 EF容器 85 db.Set<T>().Remove(u);//標識為 刪除 狀態 86 }); 87 } 88 #endregion 89 90 #region 2.1.1根據條件刪除并保存 + int DelByAndSave(Expression<Func<T, bool>> delWhere) 91 /// <summary> 92 /// 根據條件刪除并保存 93 /// </summary> 94 /// <param name="delWhere">條件</param> 95 /// <returns>受影響的行數</returns> 96 protected int DelByAndSave(Expression<Func<T, bool>> delWhere) 97 { 98 DelBy(delWhere); 99 return db.SaveChanges(); 100 } 101 #endregion 102 103 #region 3.0修改實體 + void Modify(T model, params string[] proNames) 104 /// <summary> 105 /// 修改,如: 106 /// T u = new T() { uId = 1, uLoginName = "asdfasdf" }; 107 /// this.Modify(u, "uLoginName"); 108 /// </summary> 109 /// <param name="model">要修改的實體對象</param> 110 /// <param name="proNames">要修改的 屬性 名稱</param> 111 protected void Modify(T model, params string[] proNames) 112 { 113 //4.1將 對象 添加到 EF中 114 DbEntityEntry entry = db.Entry<T>(model); 115 //4.2先設置 對象的包裝 狀態為 Unchanged 116 entry.State = (System.Data.Entity.EntityState)System.Data.EntityState.Unchanged; 117 //4.3循環 被修改的屬性名 數組 118 foreach (string proName in proNames) 119 { 120 //4.4將每個 被修改的屬性的狀態 設置為已修改狀態;后面生成update語句時,就只為已修改的屬性 更新 121 entry.Property(proName).IsModified = true; 122 } 123 } 124 #endregion 125 126 #region 3.0.1修改和保存 + int ModifyAndSave(T model, params string[] proNames) 127 /// <summary> 128 /// 修改和保存,如: 129 /// T u = new T() { uId = 1, uLoginName = "asdfasdf" }; 130 /// this.Modify(u, "uLoginName"); 131 /// </summary> 132 /// <param name="model">要修改的實體對象</param> 133 /// <param name="proNames">要修改的 屬性 名稱</param> 134 /// <returns>受影響的行數</returns> 135 protected int ModifyAndSave(T model, params string[] proNames) 136 { 137 Modify(model, proNames); 138 return db.SaveChanges(); 139 } 140 #endregion 141 142 #region 3.1批量修改 + void ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames) 143 /// <summary> 144 /// 批量修改 145 /// </summary> 146 /// <param name="model">要修改的實體對象</param> 147 /// <param name="whereLambda">查詢條件</param> 148 /// <param name="proNames">要修改的 屬性 名稱</param> 149 protected void ModifyBy(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames) 150 { 151 //4.1查詢要修改的數據 152 List<T> listModifing = db.Set<T>().Where(whereLambda).ToList(); 153 154 //獲取 實體類 類型對象 155 Type t = typeof(T); // model.GetType(); 156 //獲取 實體類 所有的 公有屬性 157 List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList(); 158 //創建 實體屬性 字典集合 159 Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>(); 160 //將 實體屬性 中要修改的屬性名 添加到 字典集合中 鍵:屬性名 值:屬性對象 161 proInfos.ForEach(p => 162 { 163 if (modifiedProNames.Contains(p.Name)) 164 { 165 dictPros.Add(p.Name, p); 166 } 167 }); 168 169 //4.3循環 要修改的屬性名 170 foreach (string proName in modifiedProNames) 171 { 172 //判斷 要修改的屬性名是否在 實體類的屬性集合中存在 173 if (dictPros.ContainsKey(proName)) 174 { 175 //如果存在,則取出要修改的 屬性對象 176 PropertyInfo proInfo = dictPros[proName]; 177 //取出 要修改的值 178 object newValue = proInfo.GetValue(model, null); //object newValue = model.uName; 179 180 //4.4批量設置 要修改 對象的 屬性 181 foreach (T usrO in listModifing) 182 { 183 //為 要修改的對象 的 要修改的屬性 設置新的值 184 proInfo.SetValue(usrO, newValue, null); //usrO.uName = newValue; 185 } 186 } 187 } 188 } 189 #endregion 190 191 #region 3.1.1批量修改并保存 + int ModifyByAndSave(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames) 192 /// <summary> 193 /// 批量修改并保存 194 /// </summary> 195 /// <param name="model">要修改的實體對象</param> 196 /// <param name="whereLambda">查詢條件</param> 197 /// <param name="proNames">要修改的 屬性 名稱</param> 198 /// <returns>受影響的行數</returns> 199 protected int ModifyByAndSave(T model, Expression<Func<T, bool>> whereLambda, params string[] modifiedProNames) 200 { 201 ModifyBy(model, whereLambda, modifiedProNames); 202 return db.SaveChanges(); 203 } 204 #endregion 205 206 #region 4.0根據條件獲取記錄條數 + int GetCountBy(Expression<Func<T, bool>> whereLambda) 207 /// <summary> 208 /// 根據條件獲取記錄條數 209 /// </summary> 210 /// <returns>總記錄條數</returns> 211 protected int GetCountBy(Expression<Func<T, bool>> whereLambda) 212 { 213 return db.Set<T>().Where(whereLambda).Count(); 214 } 215 #endregion 216 217 #region 5.0獲取所有記錄 + List<T> GetAllList() 218 /// <summary> 219 /// 獲取所有記錄 220 /// </summary> 221 /// <returns>返回的集合</returns> 222 protected List<T> GetAllList() 223 { 224 return db.Set<T>().ToList(); 225 } 226 #endregion 227 228 #region 5.1根據條件查詢 + List<T> GetListBy(Expression<Func<T, bool>> whereLambda) 229 /// <summary> 230 /// 根據條件查詢 231 /// </summary> 232 /// <param name="whereLambda">條件Lambda表達式</param> 233 /// <returns>返回的集合</returns> 234 protected List<T> GetListBy(Expression<Func<T, bool>> whereLambda) 235 { 236 return db.Set<T>().Where(whereLambda).ToList(); 237 } 238 #endregion 239 240 #region 5.2根據條件 排序 和查詢 + List<T> GetListBy<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderLambda, bool IsDes = false) 241 /// <summary> 242 /// 根據條件 排序 和查詢 243 /// </summary> 244 /// <typeparam name="TKey">排序字段類型</typeparam> 245 /// <param name="whereLambda">查詢條件 lambda表達式</param> 246 /// <param name="orderLambda">排序條件 lambda表達式</param> 247 /// // <param name="IsDes">是否逆序</param> 248 /// <returns>返回的集合</returns> 249 protected List<T> GetListBy<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderLambda, bool IsDes = false) 250 { 251 if(IsDes) 252 return db.Set<T>().Where(whereLambda).OrderByDescending(orderLambda).ToList(); 253 return db.Set<T>().Where(whereLambda).OrderBy(orderLambda).ToList(); 254 } 255 #endregion 256 257 #region 5.3分頁查詢 + List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, bool IsDes = false) 258 /// <summary> 259 /// 分頁查詢 260 /// </summary> 261 /// <param name="pageIndex">頁碼</param> 262 /// <param name="pageSize">頁容量</param> 263 /// <param name="whereLambda">條件 lambda表達式</param> 264 /// <param name="orderBy">排序 lambda表達式</param> 265 /// <param name="IsDes">是否逆序</param> 266 /// <returns>返回的集合</returns> 267 protected List<T> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, bool IsDes = false) 268 { 269 if (IsDes) 270 return db.Set<T>().Where(whereLambda).OrderByDescending(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); 271 return db.Set<T>().Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); 272 } 273 #endregion 274 275 } 276 } View Code

?  可以看出,在上面的代碼中,我提供了增刪改查的大部分方法,對于寫入性的操作,我提供了是否立刻SaveChange的選擇,如果立刻save,可以調用類似于AddAndSave()這樣的方法,如果想多次調用后統一保存以提高性能,可以調用Add()這類方法,在所有操作結束后,再調用saveChange的方法。這個幫助類中存在一個DbContext類型的屬性,它用來存放ef上下文,在teacher的實現類中,提供了它的構造方法,將dbcontext傳入。幫助類中幾乎所有的操作都依賴于這個DbContext。

  上面teacher的接口和實現都是有partial修飾,是一個部分類(接口),這樣做的目的是為了便于管理,例如日后需要添加一個學生類時可以這樣

1 public partial class Student : BaseCore<Entity.Student>, ICore.IStudent 2 { 3 public Student(DbContext dbContext) 4 { 5 db = dbContext; 6 } 7 } 8 9 public partial class Teacher : BaseCore<Entity.Teacher>, ICore.ITeacher 10 { 11 public Teacher(DbContext dbContext) 12 { 13 db = dbContext; 14 } 15 }

  這些代碼是重復的,可將它們寫在同一個cs中,如果有需要可以用T4模板自動生成,但事實上并不是每張表都需要生成對應的實體,所以我選擇手動來添加它們。教師和學生具體的登陸的邏輯可能不同,將它們放在另一個partial類中會更加合理。

  4.創建教師的部分接口和部分類

  接口如下 

1 public partial interface ITeacher 2 { 3 #region 教師登錄 + ReturnVal Login(string tid, string pwd); 4 /// <summary> 5 /// 教師登錄 6 /// </summary> 7 /// <param name="tid">教師id</param> 8 /// <param name="pwd">密碼</param> 9 /// <returns>約定返回類型</returns> 10 ReturnVal Login(string tid, string pwd); 11 #endregion 12 }

  實現如下

1 public partial class Teacher 2 { 3 4 #region 教師登錄操作 + WebModel.ReturnVal Login(string tid, string pwd) 5 /// <summary> 6 /// 教師登錄操作 7 /// </summary> 8 /// <param name="tid">教師登錄名</param> 9 /// <param name="pwd">密碼</param> 10 /// <returns>約定返回類</returns> 11 public WebModel.ReturnVal Login(string tid, string pwd) 12 { 13 int iTID = Convert.ToInt32(tid); 14 Entity.Teacher teacher = this.GetListBy(t => (t.TID == iTID) && (t.IsDel == false)).ToList().FirstOrDefault(); 15 if (teacher == null) 16 { 17 return new ReturnVal(ReturnStatu.Failure, "用戶不存在"); 18 } 19 else 20 { 21 if (EDUA_Util.EncrypHelper.MD5(pwd) == teacher.Password) 22 { 23 return new ReturnVal(ReturnStatu.Success, "登陸成功", WebModel.Teacher.ToWebModel(teacher)); 24 } 25 else 26 { 27 return new ReturnVal(ReturnStatu.Failure, "密碼錯誤"); 28 } 29 } 30 } 31 #endregion 32 }

  很簡單,首先判斷用戶是否存在,接下去判斷密碼是否正確。

  第13行,這里我使用了我的basecore里的方法,如果不想用也很簡單。

  返回值類型為ReturnVal,這是我自己的類,原因是不能簡單地用一個bool值來傳遞登陸成功與否,如果登陸成功了需要將對象返回保存在cookie,session中,以保證狀態的維持。ReturnVal也會被用在其他core與web傳遞數據的過程中。ReturnVal類如下

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace WebModel 8 { 9 /// <summary> 10 /// 返回值約定 11 /// 從core 到 web 返回內容的封裝 12 /// </summary> 13 public class ReturnVal 14 { 15 #region 屬性 16 /// <summary> 17 /// 返回的狀態 18 /// </summary> 19 public ReturnStatu Statu { get; set; } 20 /// <summary> 21 /// 返回的消息 22 /// </summary> 23 public string Message { get; set; } 24 /// <summary> 25 /// 返回的數據 26 /// </summary> 27 public object Data { get; set; } 28 #endregion 29 30 #region 構造方法 31 /// <summary> 32 /// 構造方法 33 /// </summary> 34 /// <param name="statu">狀態</param> 35 public ReturnVal(ReturnStatu statu) 36 { 37 this.Statu = statu; 38 } 39 /// <summary> 40 /// 構造方法 41 /// </summary> 42 /// <param name="statu">狀態</param> 43 /// <param name="message">消息</param> 44 public ReturnVal(ReturnStatu statu, string message) 45 : this(statu) 46 { 47 this.Message = message; 48 } 49 /// <summary> 50 /// 構造方法 51 /// </summary> 52 /// <param name="statu">狀態</param> 53 /// <param name="message">消息</param> 54 /// <param name="data">數據</param> 55 public ReturnVal(ReturnStatu statu, string message, object data) 56 : this(statu, message) 57 { 58 this.Data = data; 59 } 60 #endregion 61 } 62 63 64 /// <summary> 65 /// 狀態枚舉 66 /// </summary> 67 public enum ReturnStatu 68 { 69 /// <summary> 70 /// 成功 71 /// </summary> 72 Success, 73 /// <summary> 74 /// 失敗 75 /// </summary> 76 Failure, 77 /// <summary> 78 /// 錯誤 79 /// </summary> 80 Err 81 } 82 } View Code

  ReturnVal在WebModel程序集下,同樣在該程序集下的還有上面用到的WebModel.Teacher。按照常理,EF和View之間存在著Core層,故View不可直接依賴于EF,所以它們之間需要一層WebModel來傳遞。WebModel的存在類似于DTO,它可以剝離那些上層中用不到的字段,以下是我的WebModel中的Teacher類,為了方便,里面提供了將實體類轉換為WebModel類的靜態方法,也是上面所用到的。

1 namespace WebModel 2 { 3 public class Teacher 4 { 5 #region 屬性 6 /// <summary> 7 /// guid 8 /// </summary> 9 public System.Guid ID { get; set; } 10 /// <summary> 11 /// 學號 12 /// </summary> 13 public int TID { get; set; } 14 /// <summary> 15 /// 姓名 16 /// </summary> 17 public string Name { get; set; } 18 /// <summary> 19 /// 權限列表 20 /// </summary> 21 public List<Authority> AuthorityList { get; set; } 22 #endregion 23 24 #region 轉化為視圖類的teacher + static Teacher ToWebModel(Entity.Teacher et) 25 /// <summary> 26 /// 轉化為視圖類的teacher 27 /// </summary> 28 /// <param name="es">實體類</param> 29 /// <returns>視圖類</returns> 30 public static Teacher ToWebModel(Entity.Teacher et) 31 { 32 List<Entity.AuthorityToPower> Listatp = et.Power.AuthorityToPowers.ToList(); 33 List<Authority> ListAut = new List<Authority>(); 34 Listatp.ForEach(au => { 35 ListAut.Add(Authority.ToWebModel(au.Authority)); 36 }); 37 return new Teacher() 38 { 39 Name = et.Name, 40 TID = et.TID, 41 ID = et.ID, 42 AuthorityList = ListAut 43 }; 44 } 45 #endregion 46 }

?

  上面還用到了類似于EDUA_Util.EncrypHelper.MD5這類MD5加密算法,我將它們放到工具類中。它們在不同的項目中可以完全復用,類似這樣的方法還有加密解密cookie,生隨機數(封裝過),生成驗證碼,導入導出Excel等等。將它們統統放到Util中還可以將很多第三方的引用添加到這個程序集中,保證上層程序集的整潔,它們是整個項目的Infrastructure(基礎設施)。

  5.在ICoreSession,CoreSession中分別創建Teacher類

  上一篇中提到過,在web中的控制器中可以調用到iCoreSession,所以想要在web層調用core中teacher的login方法,就需要在ICoreSession中存在teacher對象。故接口中的代碼如下

1 public interface ICoreSession 2 { 3 ITeacher ITeacher { get; } 4 }

  CoreSession中的代碼如下,這樣保證了在一次請求中teacher的單例,通過構造方法將db對象傳入到teacher類中。

1 public class CoreSession:EDUA_ICore.ICoreSession 2 { 3 4 #region 屬性 5 private DbContext db { get; set; } 6 #endregion 7 8 #region 構造方法 9 public CoreSession() 10 { 11 db = new Entity.EDUAEntities(); 12 } 13 #endregion 14 15 #region 保存 + int SaveChanges() 16 /// <summary> 17 /// 保存修改 18 /// </summary> 19 /// <returns>受影響的行數</returns> 20 public int SaveChanges() 21 { 22 return db.SaveChanges(); 23 } 24 #endregion 25 26 ITeacher iTeacher; 27 public ITeacher ITeacher 28 { 29 get 30 { 31 if (iTeacher == null) 32 { 33 iTeacher = new Teacher(db); 34 } 35 return iTeacher; 36 } 37 } 38 }

?  6.創建Login頁面

  控制器

#region 1.0 登陸界面 [HttpGet] public ActionResult Login() {return View(); } #endregion

  頁面為強類型頁面,使用了微軟的數據驗證,所以需要導入微軟所提供的js?@Scripts.Render("~/Scripts/mvcAjax") ?使用App_Statr中的BundleConfig進行了綁定。

  

  視圖中的類型類為WebModel.LoginUser,它同樣放在webmodel程序集下的,我單獨創建了ViewModel文件夾用來存放這些類,其實將它們放在web層也是合理的。對應的代碼以及頁面如下。

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel.DataAnnotations; 4 using System.Linq; 5 using System.Web; 6 7 namespace WebModel 8 { 9 10 /// <summary> 11 /// 登陸視圖 模型 12 /// </summary> 13 public class LoginUser 14 { 15 /// <summary> 16 /// 用戶名 17 /// </summary> 18 [Required(ErrorMessage = "用戶名不能為空")] 19 public int LoginName { get; set; } 20 /// <summary> 21 /// 密碼 22 /// </summary> 23 [Required(ErrorMessage = "密碼不能為空")] 24 public string Pwd { get; set; } 25 /// <summary> 26 /// 驗證碼 27 /// </summary> 28 [Required(ErrorMessage = "請輸入驗證碼")] 29 public string VCode { get; set; } 30 /// <summary> 31 /// 身份 1 為教師 0為學生 32 /// </summary> 33 [Required(ErrorMessage = "請輸選擇身份")] 34 public int Degree { get; set; } 35 /// <summary> 36 /// 是否記住 37 /// </summary> 38 public bool IsAlways { get; set; } 39 } 40 41 } @model WebModel.LoginUser @{Layout = null; } <html> <head><title>登陸</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width" />@Scripts.Render("~/Scripts/mvcAjax")<style type="text/css">.p_main {margin-left: auto;margin-right: auto;width: 400px;margin-top: 45px;}.SingleLine {padding-top: 10px;}.alert {color: red;}#divMsg {display: none;}</style><script type="text/javascript">$(function () {$("#img_Vcode").click(function () {newVcode();});});//請求一個新的驗證碼function newVcode() {$("#img_Vcode").attr("src", "/helper/VCode/" + Math.round(Math.random() * 100000));}function Success(jsDate) {if (jsDate.Statu == "err") {$("#td_msg").html(jsDate.Msg);newVcode();}else if (jsDate.Statu == "ok") {window.location.href = jsDate.BackUrl;}}</script> </head> <body><div class="p_main"><div class="div_main">@using (Ajax.BeginForm(new AjaxOptions(){HttpMethod = "post",OnSuccess = "Success",LoadingElementId = "divMsg"})){<div class="SingleLine"><div style="float:left;width:80px;font-size:15px">登陸身份:</div><div><input type="radio" name="Degree" id="Degree0" value="0"><label for="Degree0">學生</label><input type="radio" name="Degree" id="Degree1" value="1" checked="checked"><label for="Degree1">教師</label></div></div><div style="clear:both"></div><div class="SingleLine"><div style="float:left;width:80px;font-size:15px">用戶名:</div><div style="float:left">@Html.TextBoxFor(u => u.LoginName)</div><div style="float:left" class="alert">@Html.ValidationMessageFor(u => u.LoginName)</div></div><div style="clear:both"></div><div class="SingleLine"><div style="float:left;width:80px;font-size:15px">密碼:</div><div style="float:left">@Html.PasswordFor(u => u.Pwd)</div><div style="float:left" class="alert">@Html.ValidationMessageFor(u => u.Pwd)</div></div><div style="clear:both"></div><div class="SingleLine"><div style="float:left;width:80px;font-size:15px">驗證碼:</div><div style="float:left">@Html.TextBoxFor(u => u.VCode)</div><div style="float:left"><img id="img_Vcode" src="/helper/VCode"></div><div style="float:left" class="alert">@Html.ValidationMessageFor(u => u.VCode)</div></div><div style="clear:both"></div><div class="SingleLine"><div style="float:left;padding-right:100px;">@Html.CheckBoxFor(u => u.IsAlways) <span>兩小時內免登陸</span></div><div style="float:left"><input type="submit" value="登陸" /><div id="divMsg">登陸中~~~</div></div> <div id="td_msg" class="alert"></div> </div>}</div></div> </body> </html>

?

  實際的項目中,在登錄時選擇登陸身份,有教師或學生可選,它們公用一個登陸入口,在控制器中根據頁面傳回來的信息選擇調用teacher的login方法或者是student的login方法。前臺我用了EasyUI。

  7.控制器中的登陸處理

  在控制器中,通過調用ICoreSession中teacher的login方法來進行。

    a.判斷驗證碼是否正確,如果錯誤直接返回驗證碼錯誤的json給頁面

    b.判斷用戶所選擇的登陸身份(學生的沒有寫)

    c.調用core中teacher的登陸方法,傳入用戶名和密碼

    d.根據返回的ReturnVal判斷登陸的狀態,如果成功寫入Session

    e.判斷是否需要寫入cookie,如有需要,則寫入

    f.跳轉到對應的頁面

1 #region 1.1 登錄操作 2 [HttpPost] 3 public ActionResult Login(WebModel.LoginUser userInfo) 4 { 5 //判斷驗證碼 為方便測試用0可跳過 6 OperateHelper.BussinessHelper h = new OperateHelper.BussinessHelper(iCoreSession); 7 if (((h.Vcode).ToLower() != (userInfo.VCode).ToLower()) && (userInfo.VCode != "0")) 8 { 9 return WebModel.JsonModel.AjaxMsgModel.RedirectAjax("err", "驗證碼錯誤", "", ""); 10 } 11 else 12 { 13 //學生 14 if (userInfo.Degree == 0) 15 { 16 //里面是對應學生的登陸操作 17 } 18 //教師 19 else if (userInfo.Degree == 1) 20 { 21 ReturnVal rv = iCoreSession.ITeacher.Login(userInfo.LoginName.ToString(), userInfo.Pwd); 22 if (rv.Statu == ReturnStatu.Success) 23 { 24 h.TeacherSession = rv.Data as WebModel.Teacher; 25 //保存cookie 26 if (userInfo.IsAlways) 27 { 28 h.TeacherTIDCookie = (rv.Data as WebModel.Teacher).ID.ToString(); 29 } 30 else 31 { 32 h.TeacherTIDCookie = ""; 33 } 34 return WebModel.JsonModel.AjaxMsgModel.RedirectAjax("ok", rv.Message, "", "/teacher/teacherhome/index"); 35 } 36 else 37 { 38 return WebModel.JsonModel.AjaxMsgModel.RedirectAjax("err", rv.Message, "", ""); 39 } 40 } 41 else 42 { 43 return null; 44 } 45 } 46 #endregion

寫在最后

  至此,登陸功能算是完成了,但沒有對用戶訪問權限的過濾,登陸操作就沒有任何意義。所以在下一篇中,我將會通過AuthorizeAttribute來實現用戶權限的過濾。這樣,一個最基本的架構才算形成。

?

轉載請注明出處 huhuhuo的博客園

地址:http://www.cnblogs.com/linhan/p/4298971.html

轉載于:https://www.cnblogs.com/linhan/p/4298971.html

總結

以上是生活随笔為你收集整理的1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久久久女人精品毛片 | 丁香六月婷婷 | 波多野结衣在线播放视频 | 午夜少妇 | 国产精品美女久久久久aⅴ 干干夜夜 | www夜夜操 | 91视频3p | 精品久久久久一区二区国产 | 中文字幕在线观看第三页 | 日韩偷拍精品 | 一区在线观看视频 | 久久网页| 手机在线免费av | 亚洲国内精品 | 国产在线色站 | 亚洲精品免费播放 | 18性欧美xxxⅹ性满足 | 福利一区在线 | 99精品视频在线播放免费 | 欧美电影在线观看 | 国产又粗又猛又黄视频 | 欧美网址在线观看 | 久久免费看毛片 | 精品国产电影一区二区 | 麻豆国产网站入口 | 91mv.cool在线观看 | 人人澡人人添人人爽一区二区 | av免费看av | 久久久网址 | av夜夜操| 麻豆超碰 | 久久久久久久久久福利 | 99中文字幕 | 在线播放一区 | 久久国产精品99久久人人澡 | 日韩一区二区三区免费视频 | 精品国产欧美一区二区三区不卡 | 四虎影视精品永久在线观看 | 成人在线观看av | 日韩av一区二区三区在线观看 | 97色婷婷人人爽人人 | 亚洲v欧美v国产v在线观看 | 看片网站黄色 | 欧美一区二区三区在线看 | 久久经典国产视频 | 欧美一级视频免费 | 成人网在线免费视频 | 久久av免费电影 | 色视频网站在线观看一=区 a视频免费在线观看 | 久草在线在线精品观看 | 国产a国产 | 久久久久久久久久久高潮一区二区 | 精品国产免费av | 久久999精品 | 久久夜色精品国产欧美一区麻豆 | 日日碰狠狠添天天爽超碰97久久 | 欧美大片www | 91porny九色在线播放 | 色妞色视频一区二区三区四区 | 亚洲成人一二三 | 亚洲精品黄 | 国产精品视频久久 | 免费观看黄色12片一级视频 | 国产高清免费av | 日韩最新在线视频 | 国产精品久久久久久久久久久久冷 | 国产香蕉久久精品综合网 | 免费a v在线 | 国产一区在线观看免费 | 蜜桃视频在线视频 | 国产在线中文 | 成+人+色综合 | 天天玩天天操天天射 | 99色| 日日夜夜免费精品视频 | 91亚洲在线观看 | 中文字幕电影高清在线观看 | 天天操天天舔天天爽 | 91av视频在线观看 | 日韩av偷拍 | 日韩69av| 在线成人高清电影 | 亚洲精品乱码白浆高清久久久久久 | 欧美日韩国产欧美 | 免费成人黄色av | 精品亚洲午夜久久久久91 | 99精品久久只有精品 | 久久久色 | 久久只精品99品免费久23小说 | 亚洲国产精品一区二区久久,亚洲午夜 | 亚洲一区二区三区毛片 | 中文国产字幕在线观看 | 日日摸日日添夜夜爽97 | 亚洲黄色免费在线看 | 在线观av| 国产精品久久久久久模特 | 久久综合日 | 中文字幕精品一区 | 久久精品96| 久久福利剧场 | 中文字幕亚洲欧美日韩2019 | 五月天色丁香 | 欧美一二三区播放 | 国产在线观看免费观看 | 久久99久久99精品免视看婷婷 | 日韩精品一区不卡 | 日韩大片在线 | 91九色国产 | 日日天天干 | 亚洲干| 亚洲毛片久久 | 日韩中文免费视频 | 热久久99这里有精品 | 国产麻豆果冻传媒在线观看 | 免费99视频 | 久久男女视频 | 中文字幕av在线免费 | 香蕉蜜桃视频 | 亚洲综合视频在线 | 欧美最爽乱淫视频播放 | 日韩精品中文字幕有码 | 国产中文字幕视频在线 | 91精品免费在线 | 久久亚洲欧美日韩精品专区 | 在线三级av | 99久久国产免费,99久久国产免费大片 | av东方在线 | 亚洲一区欧美激情 | 麻豆传媒视频在线 | 国产精品亚洲人在线观看 | 欧美日韩性视频在线 | 99国产在线观看 | 美女视频久久黄 | 欧美 亚洲 另类 激情 另类 | 成人午夜片av在线看 | 久久久91精品国产 | 337p日本大胆噜噜噜噜 | 久久一及片 | 成人免费观看大片 | a在线v| 精品久久久成人 | 在线观看视频一区二区三区 | 在线观看黄av | 成人av在线亚洲 | 欧美激情视频久久 | 91成人黄色 | 精品久久久久国产免费第一页 | 狠狠狠色| 日韩欧美一区二区三区在线观看 | 中文字幕在线看视频 | 在线观看国产日韩 | 欧美一二三区在线播放 | 91大神精品视频在线观看 | 91一区在线观看 | 天天激情 | 麻豆传媒在线免费看 | 丁香五月亚洲综合在线 | 成人午夜影院在线观看 | 成人午夜av电影 | 91香蕉国产在线观看软件 | 中文字幕中文中文字幕 | 美女又爽又黄 | 亚洲午夜精品一区 | 精品久久久影院 | 在线国产99 | 色吊丝在线永久观看最新版本 | 国产午夜三级一区二区三桃花影视 | av黄色免费在线观看 | 免费看污污视频的网站 | 婷婷在线免费 | 欧美性脚交| 国产一区免费在线观看 | 免费看黄色大全 | 天天操天天色综合 | 97在线视频免费看 | 9i看片成人免费看片 | 亚洲国产精品传媒在线观看 | 天天操福利视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 人人爽人人舔 | 欧美日韩国产高清视频 | 国产无限资源在线观看 | 亚洲综合网 | 黄色大片国产 | 亚洲成人国产 | 久久亚洲二区 | 国产精品一区久久久久 | 69久久99精品久久久久婷婷 | 欧美一区二区三区在线视频观看 | 五月天丁香综合 | 欧美-第1页-屁屁影院 | 日韩一区二区三区观看 | 国产高清视频在线免费观看 | 久久另类小说 | 狠狠色丁婷婷日日 | 亚洲久草网| 91麻豆精品国产91久久久更新时间 | 精品一区二区在线播放 | 国产日韩精品在线观看 | 中文av免费| 国产日韩欧美视频在线观看 | 欧美一区二区在线看 | 国产精品高清av | 天天色 天天 | 四虎国产精品免费观看视频优播 | 麻豆综合网| 免费黄a大片 | 国产精品久久99综合免费观看尤物 | 欧美大香线蕉线伊人久久 | av黄色一级片 | 中文字幕丝袜制服 | 久草在线| 97在线免费观看 | 九九在线国产视频 | 91精品啪在线观看国产线免费 | 国产视频欧美视频 | 中文字幕免费在线看 | 韩日av一区二区 | 久久成人综合视频 | 亚洲精品乱码久久久久久 | 99精品视频在线观看免费 | 亚洲精品视频在 | 欧美一二三视频 | 在线观看亚洲精品 | 69精品人人人人 | 91黄色在线视频 | 国产成人精品国内自产拍免费看 | 亚洲精品在线视频网站 | 婷婷成人亚洲综合国产xv88 | 久久久影视 | 天堂av在线网址 | 国产视频亚洲精品 | 视频在线99re | 色婷婷 亚洲 | 涩涩网站在线播放 | 欧美性做爰猛烈叫床潮 | 一区二区三区在线观看免费视频 | 精品国产自在精品国产精野外直播 | 最近久乱中文字幕 | 日本在线观看中文字幕无线观看 | 久久新 | 成人四虎影院 | 美女在线国产 | 久久不色 | 黄网站色视频免费观看 | 日本一区二区三区视频在线播放 | 久草在线播放视频 | 波多野结衣在线播放视频 | 日韩在线观看精品 | 亚洲精品男人的天堂 | 久久久久久久精 | 狠狠躁日日躁夜夜躁av | 久久视频国产 | 天天爽天天爽夜夜爽 | 在线观看成人毛片 | 精品国产乱子伦一区二区 | 日韩亚洲在线观看 | 久久精品之 | 天天婷婷| 国产精品视频永久免费播放 | 九色免费视频 | 夜夜躁日日躁狠狠久久88av | 亚洲二区精品 | 91精品国产欧美一区二区 | 中文字幕国产 | 免费高清在线观看电视网站 | 色欲综合视频天天天 | 国产在线观看99 | 美女网站黄在线观看 | 精品91久久久久 | 日日干天天射 | 中文字幕亚洲欧美 | 色中文字幕在线观看 | 欧美性久久久久久 | 婷婷国产在线 | 久久精品久久精品久久 | 久久99久久99免费视频 | 可以免费观看的av片 | 麻豆久久久久 | 人人爽人人射 | 久久精彩免费视频 | 四虎最新域名 | 91中文字幕 | 天天操天天操天天操 | 亚洲一区免费在线 | 成年人视频在线免费 | 日本高清中文字幕有码在线 | 中文字幕人成乱码在线观看 | 97成人在线免费视频 | 超碰在线97国产 | 色婷婷激情综合 | 五月激情天| 国产一区高清在线 | 精品视频成人 | 综合色影院 | 久久综合精品一区 | 九九涩涩av台湾日本热热 | 成人黄色毛片 | 久久久久久高潮国产精品视 | 激情综合电影网 | 中文字幕亚洲精品日韩 | www国产亚洲精品久久麻豆 | 黄色日批网站 | 久久天天躁狠狠躁亚洲综合公司 | 亚洲综合黄色 | 99久久毛片| 国色天香在线观看 | 久久精品成人 | 麻豆影视网站 | 欧美日韩在线观看视频 | 天天综合日日夜夜 | 精品毛片一区二区免费看 | 在线韩国电影免费观影完整版 | 波多野结衣电影一区二区 | 天天干天天摸天天操 | 婷婷色在线资源 | 国产又粗又长的视频 | 国产精品免费麻豆入口 | 免费看黄色小说的网站 | 亚洲91中文字幕无线码三区 | 特黄特色特刺激视频免费播放 | 99久久精品免费一区 | 欧美一区二区三区在线播放 | 一区免费视频 | 99热这里只有精品1 av中文字幕日韩 | av网站在线观看免费 | 夜夜操夜夜干 | 在线午夜电影神马影院 | a天堂一码二码专区 | 久久精品99久久 | 国产黄色av | 黄色福利网站 | 日韩免费一区二区在线观看 | 在线观看国产麻豆 | av电影在线观看完整版一区二区 | 国语对白少妇爽91 | 久久综合久久八八 | 亚洲精选视频在线 | 欧美视频日韩 | 亚洲最新av | 日韩欧美精品在线视频 | 国产一区精品在线观看 | 欧美一级片在线免费观看 | 狠狠88综合久久久久综合网 | 日韩精品久久久久久 | 国产一级片久久 | 日韩色中色 | 日本精品一二区 | 99久久99久久免费精品蜜臀 | 99久精品 | 欧美精品久久久久久 | av高清一区二区三区 | 久久久久久久电影 | 国产精品福利一区 | 久操视频在线免费看 | 欧美成人精品三级在线观看播放 | 亚洲精品小视频 | 国产高清av | 婷婷色在线视频 | 日韩精选在线观看 | 樱空桃av| 最新精品视频在线 | 国产区在线视频 | 丁香视频| 国产福利精品在线观看 | 国产午夜精品一区 | 美女av在线免费 | 欧美专区日韩专区 | 国内久久精品视频 | 国产拍揄自揄精品视频麻豆 | 精品久久久久久亚洲综合网站 | 人人澡人人爱 | 亚洲va综合va国产va中文 | 一区二区精品在线 | 国产精品自在线 | 激情网五月婷婷 | 欧美激情综合五月 | www在线免费观看 | 色婷婷激情 | 人人爽人人爽 | 久久99精品国产99久久6尤 | www.99热精品 | 久久草视频 | 蜜臀av性久久久久av蜜臀妖精 | 色婷婷97 | 91av视频网站| 国产精品专区在线 | 免费av福利 | av在线免费网站 | 不卡国产在线 | 久久久九九| 视频91| 久久久激情网 | 夜夜爽夜夜操 | 色噜噜在线观看 | 国产高清小视频 | 欧美va日韩va | 国产精品久久久久影院 | 一区二区三区在线观看中文字幕 | 天天艹日日干 | 涩涩网站在线观看 | 国产一区二区三区免费观看视频 | 99在线看 | 日韩激情久久 | 888av| 久热只有精品 | 精品亚洲欧美一区 | 日韩在线观看视频在线 | 伊人开心激情 | 国产精品成人免费一区久久羞羞 | 午夜精品久久久99热福利 | 国产成人精品在线 | 午夜黄色| 日本狠狠干| 99久久99久久免费精品蜜臀 | 国内外激情视频 | av大全在线 | 久久视频这里有久久精品视频11 | 久久精品官网 | 天天色天天射天天操 | 8x成人免费视频 | 欧美精品亚洲精品日韩精品 | 日b视频国产 | 激情一区二区三区欧美 | 天堂av免费观看 | 久草在线观看视频免费 | 精品一二三四五区 | 欧美日韩在线精品一区二区 | 99国产视频 | 亚洲精品中文字幕在线 | 在线韩国电影免费观影完整版 | 国产在线观看 | 麻豆精品视频 | 亚洲精品在线一区二区三区 | 国产又粗又硬又长又爽的视频 | 在线国产一区 | 91国内在线 | 久久99久久99精品免观看软件 | 激情五月婷婷综合网 | 一区二区在线影院 | 精品国产伦一区二区三区 | 中文字幕一区在线 | 中文字幕免费高清在线观看 | 欧美日本一区 | 国产欧美最新羞羞视频在线观看 | 免费久久网 | 日韩欧美在线一区二区 | 亚洲美女视频在线 | 亚洲激情中文 | 欧美精品久久久久久久久久久 | 久久久久国产免费免费 | 久久国产一区二区 | 日韩中文在线观看 | 欧美激情精品一区 | 亚洲aⅴ在线 | 国产精品久久久久久久久软件 | 精品一区二区久久久久久久网站 | 欧美一级免费在线 | 粉嫩av一区二区三区入口 | 在线国产视频观看 | 一区二区精品视频 | 亚洲婷婷综合色高清在线 | 美腿丝袜一区二区三区 | 日韩av午夜 | 中文字幕国语官网在线视频 | 国产资源中文字幕 | 日本久久99 | 国产视频 亚洲精品 | 国产精品男女视频 | 一区二区三区观看 | 麻豆成人在线观看 | 欧美日韩在线播放一区 | 波多野结衣网址 | 天天操天天爽天天干 | 国产国语在线 | 国产xxxx做受性欧美88 | 免费日韩视频 | 中文在线免费一区三区 | 国产精品区免费视频 | 高清在线一区二区 | 国产精品一区二区三区在线 | 91在线免费视频观看 | 99精品久久精品一区二区 | 色小说在线 | 激情中文字幕 | 日韩欧美在线视频一区二区 | 亚洲精品国偷自产在线91正片 | 国产一级二级视频 | 天天做天天爱天天爽综合网 | 日日操日日插 | 2023亚洲精品国偷拍自产在线 | 91亚色视频在线观看 | 日韩综合在线观看 | 国产精品久久久免费看 | 欧美久久久久久久久中文字幕 | 色综合天天狠天天透天天伊人 | 婷婷激情小说网 | 日韩电影精品 | 欧美一区三区四区 | 国产精品久久久久久超碰 | 欧美午夜久久 | 欧美日韩一区二区在线 | 伊人五月综合 | 久热国产视频 | 久久国产精品成人免费浪潮 | 97在线观看免费高清完整版在线观看 | 久久免费国产精品 | 久久久久国产一区二区三区 | 九九免费在线观看 | 亚洲日本精品 | 99久久精品国产欧美主题曲 | 国产美女黄网站免费 | 欧美巨乳波霸 | 国产午夜精品一区二区三区欧美 | 天天干天天干天天干 | 精品少妇一区二区三区在线 | 亚洲天堂网在线视频 | 激情在线网 | 国产一区二区高清不卡 | 中文字幕在线观看国产 | 亚洲国产三级在线观看 | 奇米777777 | 日韩素人在线观看 | 亚洲色图美腿丝袜 | 9999国产精品 | 91精品久久久久久粉嫩 | 久国产在线播放 | 五月天中文字幕mv在线 | 亚洲最新视频在线播放 | 一级特黄av | 欧美日韩不卡一区二区三区 | 一区二区理论片 | 久久调教视频 | 久久在线播放 | 亚洲国产成人高清精品 | 日韩精品免费在线观看 | 黄色网免费 | 国内外成人在线视频 | 成 人 黄 色视频免费播放 | 91免费观看视频网站 | 亚洲成人精品国产 | 黄色影院在线免费观看 | 国产精品乱码久久久久久1区2区 | 91在线九色 | 国产精品九九久久99视频 | 免费看黄在线 | 免费看国产曰批40分钟 | 最近的中文字幕大全免费版 | 国产精品欧美日韩在线观看 | 色婷婷中文 | 成人一区二区在线观看 | 日操干 | 能在线看的av | 精品免费视频 | 96久久欧美麻豆网站 | 成人毛片一区 | 日韩av中文字幕在线 | 色综合久久中文综合久久牛 | 国产日韩在线播放 | 97香蕉久久超级碰碰高清版 | 永久黄网站色视频免费观看w | 国产欧美高清 | 国产麻豆精品免费视频 | 97在线成人| 精品国产一区二区三区av性色 | 黄污在线观看 | 亚洲精品456在线播放第一页 | 日日射av| 99精品视频免费 | 一区二区三区精品久久久 | 亚洲欧美视频在线 | 麻豆视频免费在线 | 日韩欧美高清一区二区 | 久久视频6 | 国产精品久久久久久久久久久免费看 | 亚洲精品一区二区久 | 最新色视频 | 在线精品在线 | 亚洲少妇影院 | 女人18毛片90分钟 | 成人综合日日夜夜 | 日韩国产精品一区 | 免费v片| 国产成人精品av在线观 | 久久成人午夜 | 中文字幕乱偷在线 | 日日婷婷夜日日天干 | 激情综合网五月婷婷 | 国产高清专区 | 欧美亚洲久久 | av动图| 国产97av| 一区二区三区免费在线观看视频 | 成年人在线免费看 | 一区二区三区在线观看免费 | 99在线精品免费视频九九视 | 日本久久久亚洲精品 | 久久综合偷偷噜噜噜色 | 亚州精品视频 | 奇米先锋 | bbw av| 一区二区三区在线观看免费视频 | 久久精品99久久久久久2456 | 99热手机在线观看 | 在线亚洲欧美日韩 | 日韩丝袜 | 中文字幕中文字幕在线一区 | 91色影院 | 91免费版成人 | 在线观看黄色免费视频 | 欧美日韩综合在线观看 | 中文字幕av播放 | 免费日韩在线 | 波多野结衣网址 | 免费观看午夜视频 | 天天操天天吃 | 日日夜夜网 | 天天综合日日夜夜 | 4p变态网欧美系列 | 91成人在线观看高潮 | 国产一区二区免费 | 在线观看视频三级 | www黄| 五月婷激情 | 一级黄色片在线观看 | 久青草国产在线 | 开心激情久久 | 美女久久网站 | 成年人视频在线免费观看 | 中文字幕日韩在线播放 | 天天干,天天射,天天操,天天摸 | 成人一级片在线观看 | 亚洲欧洲精品一区二区精品久久久 | 天天干天天干天天色 | 欧美精品久久人人躁人人爽 | 成人黄性视频 | 中文字幕精 | 91av99| 伊人婷婷久久 | 国产精品久久久久aaaa九色 | 国产精品刺激对白麻豆99 | 欧美男女爱爱视频 | 在线成人免费电影 | 国产成人久久精品77777综合 | 日本三级国产 | 最新中文字幕在线观看视频 | 国产成人精品免费在线观看 | 人人爱爱人人 | 一区二区三区免费在线观看视频 | 欧美日韩视频一区二区三区 | 国产一级视频 | 天天爱综合| 麻花豆传媒mv在线观看网站 | 免费观看av | 免费av大片| aaaaaa毛片| 国产综合小视频 | 日韩在线视频播放 | 最近最新中文字幕视频 | 色中色亚洲 | 97超碰在线免费观看 | 国产91对白在线 | 久久精品毛片 | 午夜av电影院 | 色综合天天 | 亚洲精品久久久蜜桃 | 992tv在线成人免费观看 | 国产91免费观看 | 中文字幕亚洲字幕 | 99精品国产99久久久久久福利 | 美女网站在线免费观看 | 九九热在线观看视频 | 九九热1 | 日韩三级视频在线观看 | 中文一二区 | 五月天视频网 | 亚洲欧美日本国产 | 国产精品欧美精品 | 这里只有精彩视频 | 成人免费视频网址 | 在线观看中文字幕av | av综合网址| 97热视频| 超碰在线1 | 日韩av在线免费看 | 亚洲一级特黄 | 黄色免费网站下载 | 中文字幕 在线 一 二 | 最新av在线播放 | 国产成本人视频在线观看 | 国产成人免费网站 | 97国产精品亚洲精品 | 免费观看mv大片高清 | 国产精品综合在线 | 91精品国产欧美一区二区 | 人人爽久久久噜噜噜电影 | 超碰人人91 | 亚洲一区视频免费观看 | 成人精品福利 | 91最新中文字幕 | 国产一二三四在线观看视频 | 国产精品久久精品国产 | 日日成人网 | 青草草在线 | 99精品一区二区 | 久久亚洲精品电影 | 日韩亚洲在线观看 | 99免费精品视频 | 日本黄色免费在线观看 | 国产91成人 | 丁香婷婷在线观看 | 欧美一区二区三区在线播放 | 久久高清av | 婷婷综合电影 | 亚洲电影图片小说 | 夜夜躁狠狠躁日日躁视频黑人 | 在线成人看片 | 亚洲在线不卡 | 中文字幕久久精品亚洲乱码 | 亚洲精品五月 | 深夜福利视频在线观看 | 日韩av中文 | 一二三精品视频 | 中文在线字幕免 | 亚洲激情在线播放 | 69国产成人综合久久精品欧美 | 中文字幕视频在线播放 | 色久av| 黄色av网站在线观看免费 | 2024国产精品视频 | 91精品久久久久久久99蜜桃 | 悠悠av资源片 | 亚洲免费av片 | 国内精品久久影院 | 黄色av一级片 | 欧美一区二区三区免费看 | 亚洲午夜激情网 | 国产精品一区二区电影 | 久久久999| av免费电影网站 | 超碰.com| 亚洲综合视频在线播放 | 亚洲精品网页 | 99婷婷狠狠成为人免费视频 | 在线性视频日韩欧美 | 少妇高潮流白浆在线观看 | 国产淫片| 成人黄色在线播放 | 天天玩天天干天天操 | 99国产精品久久久久老师 | 91一区二区三区在线观看 | 久久久精品视频网站 | 亚洲在线精品 | 91黄视频在线 | 99麻豆视频 | 国内精品久久久久久久久久清纯 | 精品99久久久久久 | 日韩在线观看第一页 | 麻豆视频在线免费观看 | 国产精品成久久久久三级 | 亚洲精选视频在线 | 久久久久久久免费观看 | 91片黄在线观 | 国产伦精品一区二区三区高清 | 国产精品99久久久久久武松影视 | 欧美日韩国产在线 | 免费观看国产成人 | 国产三级午夜理伦三级 | 久久精品综合一区 | 色.com| 在线观看免费高清视频大全追剧 | 欧美福利片在线观看 | 国产精品久久一区二区三区不卡 | 99久久精品费精品 | 麻豆国产在线视频 | 久久97视频| 天天操夜夜干 | h久久| 99精品国产在热久久下载 | 999色视频| 日韩精品一区二区三区第95 | 中文在线8资源库 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 永久免费的啪啪网站免费观看浪潮 | 欧美电影在线观看 | 婷婷在线免费观看 | 天天天天射 | 中文字幕一区在线观看视频 | 西西444www高清大胆 | 天天干夜夜夜操天 | 特级西西444www大胆高清无视频 | 免费在线观看av片 | 日韩视频中文字幕在线观看 | 91私密保健 | 色婷婷激婷婷情综天天 | 久久欧洲视频 | 欧美色操 | 黄色在线成人 | 免费久草视频 | 黄色激情网址 | 97精品伊人 | 国产一级片播放 | 在线观看激情av | 亚洲理论在线观看电影 | 波多野结衣精品在线 | 91看成人 | 欧美日韩三级在线观看 | 97色涩 | 天天干,天天干 | 免费观看一级视频 | 久久9精品 | 亚洲精品99久久久久中文字幕 | 久久成人人人人精品欧 | 伊人亚洲综合网 | 久久婷婷国产 | 国产精品久久久久久久久久久久久 | 欧美国产日韩一区二区 | 国产亚洲综合精品 | 国产又粗又猛又黄视频 | 最新av在线网址 | 人人模人人爽 | 人人揉人人揉人人揉人人揉97 | 欧美日韩精品在线播放 | 日本久久91 | 日韩欧美视频一区二区三区 | 91网页版免费观看 | 国产在线播放一区 | 欧美 国产 视频 | 国产高清99 | 久久久国际精品 | 在线三级中文 | 人人爽人人爽人人爽 | 911av视频 | 国产在线不卡精品 | 激情综合五月网 | 最近中文字幕国语免费av | 夜夜骑天天操 | 超碰免费成人 | 啪啪动态视频 | 精品亚洲视频在线观看 | 色的网站在线观看 | 国产在线观看你懂得 | 91丨九色丨高潮 | www.久热| 亚洲一区欧美精品 | 精品国产一区二区三区噜噜噜 | 国产三级av在线 | 免费久久网 | 中文有码在线 | 久久国产品| 成人一区二区三区在线 | 99这里只有精品99 | 国产情侣一区 | 日韩r级在线 | 久久久精品欧美 | 日本久久免费视频 | 亚洲天堂精品视频 | 黄色在线免费观看网址 | 国产精品ssss在线亚洲 | 国产性天天综合网 | 在线观看第一页 | 天天操天天干天天干 | 五月婷婷视频在线 | 精品国产乱码一区二区三区在线 | 不卡av在线 | 免费黄色激情视频 | 日韩av影视 | 欧美日韩精品网站 | 日韩在线视频播放 | 91豆花在线观看 | 91.精品高清在线观看 | 夜夜操天天操 | 美女视频网站久久 | 久久国产精品免费视频 | 欧美精品久久久久久久久久丰满 | 高潮毛片无遮挡高清免费 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日韩亚洲国产中文字幕 | 日本激情视频中文字幕 | 99视频播放 | 日韩av电影中文字幕在线观看 | 91九色蝌蚪国产 | 国产一区二区视频在线播放 | 国产欧美久久久精品影院 | 色婷婷久久久 | 欧美精品久久久久久久免费 | 999免费视频 | 亚洲精品一区二区三区高潮 | 成人欧美亚洲 | 少妇bbw搡bbbb搡bbb | 精品国产一区二 | 国产亚洲久一区二区 | 国产精品一区二区免费 | 精品一区二区三区在线播放 | 久久av一区二区三区亚洲 | 成人黄色大片在线免费观看 | 亚洲国产精品久久久久婷婷884 | 国产成人亚洲精品自产在线 | 国产精品1024 | 97超碰国产精品 | 最新av网址大全 | 99精品在线 | 国产91免费看 | 国产男男gay做爰 | 毛片基地黄久久久久久天堂 | 天堂av影院 | 中文字幕永久 | 成人久久18免费网站麻豆 | 国产亚洲欧美精品久久久久久 | 亚洲黑丝少妇 | 国产成人一区三区 | 黄色一及电影 | 免费视频二区 | 在线播放视频一区 | 久久开心激情 | 成人免费毛片aaaaaa片 | 日韩区欧美久久久无人区 | 黄色动态图xx | 91av中文字幕 | 久久撸在线视频 | 国产精品24小时在线观看 | www最近高清中文国语在线观看 | 亚洲在线精品视频 | av中文字幕av | 国际av在线 | av在线播放快速免费阴 | 天天综合久久 | 91在线免费公开视频 | 丁香高清视频在线看看 | 日韩一二三在线 | 激情视频一区 | 欧美伦理一区 | 91试看| 视频在线观看一区 | 国产精品高清免费在线观看 | 手机av电影在线观看 | av黄色大片 | 99热这里只有精品久久 | 色婷婷福利 | 久久精品96 | 夜夜操天天操 | 日韩a在线看 | 五月花激情 | 久久国产手机看片 | 久久伦理网 | 97精品在线视频 | 欧美成人精品三级在线观看播放 | 国产精品 999 | 三级黄色在线观看 | 成人全视频免费观看在线看 | 亚洲天天在线 | 精品一区av | 911久久 | 中文字幕国产精品一区二区 | 中文字幕中文字幕中文字幕 | 久久亚洲综合色 | 又黄又爽又湿又无遮挡的在线视频 | 丁香婷婷激情网 | 精品美女久久 | 五月激情综合婷婷 | 国产精品99久久久久久宅男 | 国产精品综合在线观看 | 91视频麻豆视频 | 国产网红在线观看 | 97天堂 | 日韩欧美视频在线观看免费 | 亚洲激情av | 久久观看免费视频 | 久免费| 欧美在线观看小视频 | 91在线产啪 | 中文字幕在线观看第三页 | 97av在线 | www.99在线观看 | 久久久久久久免费观看 | 婷婷在线资源 | 色香天天 | 久久久久久久久久久网站 | 91爱爱视频 | 狠狠激情中文字幕 | 黄色毛片视频免费 | 成人免费在线网 | 97超碰超碰久久福利超碰 | 99福利影院| 色吊丝av中文字幕 | 国产又粗又猛又黄又爽视频 | 97碰在线| 一区二区三区在线影院 | 国产群p | www.香蕉视频在线观看 | 国产精品6 | 97视频在线观看免费 | 欧美一二三四在线 | www.com久久久| 精品久久一区 | 97av视频| 亚洲日本va在线观看 | 日韩在线观看视频在线 |