public async Task <IHttpActionResult> Remove([FromBody] QItem p)
        {
            var r  = new ResultBase();
            var id = p.id;

            using (db0 = new Bpple_DBEntities())
            {
                try
                {
                    var md = await db0.Member.FindAsync(id);

                    var entry = db0.Entry <Member>(md);
                    entry.State = EntityState.Deleted;
                    await db0.SaveChangesAsync();

                    r.state = 0;
                }
                catch (Exception ex)
                {
                    r.state   = 999;
                    r.message = ex.Message;
                }
                return(Ok(r));
            }
        }
        public async Task <IHttpActionResult> Modify([FromBody] PutData p)
        {
            var r  = new ResultBase();
            var md = p.md;
            var id = p.id;

            using (db0 = new Bpple_DBEntities())
            {
                try
                {
                    #region set value
                    db0.Entry(md).State = EntityState.Modified;
                    await db0.SaveChangesAsync();

                    #endregion
                    r.state = 0;
                }
                catch (Exception ex)
                {
                    r.state   = 999;
                    r.message = ex.Message;
                }
                return(Ok(r));
            }
        }
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public async Task <IHttpActionResult> Post([FromBody] PostData p)
        {
            var r = new ResultInsert <int>();

            var md = p.md;
            var id = p.id;

            using (db0 = new Bpple_DBEntities())
            {
                try
                {
                    db0.Member.Add(md);
                    await db0.SaveChangesAsync();

                    r.state = 0;
                    r.id    = md.id;
                }
                catch (Exception ex)
                {
                    r.state   = 999;
                    r.message = ex.Message;
                }
                return(Ok(r));
            }
        }
        /// <summary>
        /// 取得查詢資料及Grid Page資料
        /// </summary>
        /// <param name="q"></param>
        /// <returns></returns>
        public async Task <IHttpActionResult> Get([FromUri] QGet q)
        {
            var r         = new ResultData <GridInfo>();
            int page      = q.page == null ? 1 : (int)q.page;
            var predicate = PredicateBuilder.True <Member>();

            if (q.keyword != null)
            {
                predicate = predicate.And(x => x.name.Contains(q.keyword) || x.zip.Contains(q.keyword) || x.city.Contains(q.keyword) ||
                                          x.country.Contains(q.keyword) || x.address.Contains(q.keyword));
            }

            using (db0 = new Bpple_DBEntities())
            {
                var item_where = db0.Member.AsExpandable().Where(predicate);
                var item_count = await item_where.CountAsync(); //取得此條件下總筆數

                //進行排序 或點選欄位排序
                IQueryable <Member> item_order = null;

                if (!SortField(item_where, q._field, q._sort, out item_order))
                {
                    item_order = item_where.OrderByDescending(x => new { x.id });     //沒有排序進行預設排序
                }
                int start_record = PageCount.PageInfo(page, defPageSize, item_count); //計算分頁資訊,取得需跳至開始的那一筆。

                var get_item = await item_order
                               .Select(x => new
                {
                    x.id,
                    x.name,
                    x.birthday,
                    x.zip,
                    x.city,
                    x.country,
                    x.address,
                    x.state
                }).AsExpandable()
                               .Skip(start_record)
                               .Take(defPageSize)
                               .ToListAsync();

                r.state = 0; //設定狀態 0:正常
                r.exist = get_item.Any();
                r.data  = new GridInfo()
                {
                    rows       = get_item,
                    total      = PageCount.TotalPage,
                    page       = PageCount.Page,
                    records    = PageCount.RecordCount,
                    startcount = PageCount.StartCount,
                    endcount   = PageCount.EndCount,
                    field      = q._field,
                    sort       = q._sort
                };
                return(Ok(r));
            }
        }
        public async Task <IHttpActionResult> Get([FromUri] QItem p)
        {
            var r  = new ResultData <Member>();
            var id = p.id;

            using (db0 = new Bpple_DBEntities())
            {
                var item = await db0.Member.FindAsync(id);

                r.state = 0;
                r.data  = item;
                r.exist = item != null;
                return(Ok(r));
            }
        }
        public async Task <string> loginCheck(LoginViewModel model)
        {
            LoginResult r = new LoginResult();

            if (!ModelState.IsValid)
            {
                r.message = ModelStateErrorPack();
                r.state   = 3; //填寫不完整
                return(defJSON(r));
            }
            if (string.IsNullOrEmpty((Session[WebSetup.CheckCodeSession] ?? "").ToString()))
            {
                r.state = 1;
                Session[WebSetup.CheckCodeSession] = Guid.NewGuid();
                r.message = "驗證碼不正確";

                return(defJSON(r));
            }
            r.vildate = Session[WebSetup.CheckCodeSession].Equals(model.validate) ? true : false;
            if (!r.vildate)
            {
                Session[WebSetup.CheckCodeSession] = Guid.NewGuid(); //只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                r.state   = 1;                                       //驗證碼不正確
                r.message = "驗證碼不正確";
                return(defJSON(r));
            }
            #region 帳密碼檢查
            using (var db0 = new Bpple_DBEntities())
            {
                try
                {
                    var account  = model.account.Trim();
                    var password = ProcCore.EncryptString.Cryp(model.password.Trim());
                    var get_user = await db0.TBLogin.Where(x => x.LoginId == account& x.Pwd == password).FirstOrDefaultAsync();

                    if (get_user == null)
                    {
                        //帳密碼錯誤
                        r.state   = 1;
                        r.message = "帳號或密碼錯誤,請重新輸入。";//帳號或密碼錯誤 請重新輸入
                        return(defJSON(r));
                    }
                    if (get_user.state == UserState.Stop) //帳號停權
                    {
                        r.state   = 2;                    //帳號停權
                        r.message = "此帳號已停權,無法登入!";
                        return(defJSON(r));
                    }
                    #region 後台登錄

                    string user_data = get_user.LoginType; //記錄登錄權限類型
                                                           //有效期限 三天
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, get_user.LoginId, DateTime.Now, DateTime.Now.AddDays(3),
                                                                                     false, user_data, FormsAuthentication.FormsCookiePath);
                    string encTicket = FormsAuthentication.Encrypt(ticket);
                    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

                    DateTime last_login_time = get_user.last_login ?? DateTime.Now;
                    get_user.last_login = DateTime.Now;
                    await db0.SaveChangesAsync();

                    //寫入所需的Cookie資訊
                    var cookie_loginid = new HttpCookie(WebSetup.Cookie_LoginId, get_user.LoginId.Trim());
                    cookie_loginid.HttpOnly = true;
                    Response.Cookies.Add(cookie_loginid);

                    var cookie_login_type = new HttpCookie(WebSetup.Cookie_RoleId, get_user.LoginType);
                    cookie_login_type.HttpOnly = true;
                    Response.Cookies.Add(cookie_login_type);

                    var cookie_login_name = new HttpCookie(WebSetup.Cookie_UserName, Server.UrlPathEncode(get_user.name));
                    cookie_login_name.HttpOnly = true;
                    Response.Cookies.Add(cookie_login_name);

                    #endregion


                    r.url   = Url.Content("~/Home/Member");
                    r.state = 0;
                    return(defJSON(r));
                }
                catch (Exception ex)
                {
                    r.message = ex.Message;
                    r.state   = 99;
                    return(defJSON(r));
                }
            }
            #endregion
        }