Exemplo n.º 1
0
        /// <summary>
        /// 获取产品列表
        /// </summary>
        /// <param name="po"></param>
        /// <returns></returns>
        public ResponseResultBase GetList(ProductListPO po)
        {
            var response = new ResponseResultBase();

            #region 参数拼接
            Expression <Func <Product, bool> > filter = null;
            if (!string.IsNullOrEmpty(po.Name))
            {
                filter = filter.And(x => x.Name.Contains(po.Name));
            }
            if (po.Status != ProductStatus.All)
            {
                filter = filter.And(x => x.Status == po.Status);
            }
            Expression <Func <Product, object> > orderBy = x => x.Sequence;
            #endregion
            var productList           = _productRepository.GetPageList(out int totalCount, po.Page, po.Limit, filter, orderBy, false);
            var productStatusEnumList = EnumHelper.EnumToList <ProductStatus>();
            var rows = productList.Select(x => new ProductListDTO
            {
                Id          = x.Id,
                Name        = x.Name,
                Description = x.Description,
                Status      = productStatusEnumList.Where(t => t.EnumValue == (int)x.Status).FirstOrDefault().Discription,
                Sequence    = x.Sequence,
                CreatedDate = x.CreatedDate.ToString("yy/MM/dd hh:mm:ss"),
                UpdatedDate = x.UpdatedDate.ToString("yy/MM/dd hh:mm:ss")
            }).ToList();
            var data = new ElementUIPagedList <ProductListDTO>();
            data.Total    = totalCount;
            data.Items    = rows;
            response.Data = data;
            return(response);
        }
Exemplo n.º 2
0
        public ResponseResultBase PostAsync(HttpContent httpContent, string url)
        {
            var        result = new ResponseResultBase();
            HttpClient client = _httpClientFactory.CreateClient();

            try
            {
                var response = client.PostAsync(url, httpContent).Result;
                if (response.IsSuccessStatusCode)
                {
                    var data = response.Content.ReadAsStringAsync().Result;
                    result.Data = data;
                }
                else
                {
                    string message = "地址:" + url + "请求失败,原因:" + response.Content.ToString();
                    result.SetFailed(message, ErrorCode.InternalServerError);
                }
            }
            catch (Exception e)
            {
                string message = "接口异常:地址:" + url + "请求失败,原因:" + e.Message;
                result.SetFailed(message, ErrorCode.InternalServerError);
            }
            return(result);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 注册JWT Bearer认证服务的静态扩展方法
        /// </summary>
        /// <param name="services"></param>
        /// <param name="appSettings">JWT授权的配置项</param>
        public static void AddJwtBearerAuthentication(this IServiceCollection services, JWTSetting jwtSetting)
        {
            //使用应用密钥得到一个加密密钥字节数组
            var key = Encoding.ASCII.GetBytes(jwtSetting.Secret);

            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddCookie(cfg => cfg.SlidingExpiration = true)
            .AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata      = true;
                x.SaveToken                 = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(key),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
                x.Events = new JwtBearerEvents
                {
                    //此处为权限验证失败后触发的事件
                    OnChallenge = context =>
                    {
                        //此处代码为终止.Net Core默认的返回类型和数据结果,这个很重要哦,必须
                        context.HandleResponse();
                        //自定义自己想要返回的数据结果,我这里要返回的是Json对象,通过引用Newtonsoft.Json库进行转换
                        var result = new ResponseResultBase();
                        result.SetFailed("很抱歉,您无权访问该接口", ErrorCode.NoPermission);
                        var serializerSettings = new JsonSerializerSettings
                        {
                            // 设置为驼峰命名
                            ContractResolver = new CamelCasePropertyNamesContractResolver()
                        };
                        var payload = JsonConvert.SerializeObject(result, serializerSettings);
                        //自定义返回的数据类型
                        context.Response.ContentType = "application/json";
                        //自定义返回状态码,默认为401 我这里改成 200
                        context.Response.StatusCode = StatusCodes.Status200OK;
                        //输出Json数据结果
                        context.Response.WriteAsync(payload);
                        return(Task.FromResult(0));
                    }
                };
            });
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获取当前登陆用户信息
        /// </summary>
        /// <param name="qc"></param>
        /// <returns></returns>
        public ResponseResultBase GetUserInfo()
        {
            var response = new ResponseResultBase();
            var user     = _workContext.CurrentUser;

            if (user != null)
            {
                response.Data = user;
            }
            else
            {
                response.SetFailed("用户未登录或登陆超时,请重新登陆", ErrorCode.NoPermission);
            }
            return(response);
        }
Exemplo n.º 5
0
        public void OnException(ExceptionContext context)
        {
            var result = new ResponseResultBase();
            //这里面是自定义的操作记录日志
            string message = context.Exception.Message;

            if (_env.IsDevelopment())
            {
                message = context.Exception.Message + context.Exception.StackTrace;//堆栈信息
            }
            result.SetFailed(message, ErrorCode.InternalServerError);
            context.Result = new BadRequestObjectResult(result);//返回异常数据
            //采用log4net 进行错误日志记录
            _logger.LogError(context.Exception, result.Message);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 用户登陆,返回用户信息
        /// </summary>
        /// <param name="qc"></param>
        /// <returns></returns>
        public ResponseResultBase GetToken(TokenGetPO qc)
        {
            var response = new ResponseResultBase();
            var user     = _userRepository.Find(x => x.Account == qc.Account && x.Password == qc.Password);

            if (user == null)
            {
                response.SetFailed("用户不存在", ErrorCode.Failed);
                return(response);
            }
            else if (user.IsDisabled)
            {
                response.SetFailed("账号已被禁用", ErrorCode.Failed);
                return(response);
            }
            var menuList = new List <string>();
            var roleList = user.UserRoleList.Select(x => x.Role).ToList();

            if (roleList != null && roleList.Count > 0)
            {
                menuList = roleList.SelectMany(x => x.RoleMenuList.Select(t => t.Menu.Url)).ToList();
            }

            var claimsIdentity = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim("account", user.Account),
                new Claim(ClaimTypes.Name, user.Name),
                new Claim("isAdmin", user.IsAdmin.ToString()),
                new Claim("avatar", user.Avatar),
                new Claim("menus", JsonConvert.SerializeObject(menuList))
            });
            var token = this.GenerateToken(claimsIdentity);

            response.Data = token;
            return(response);
        }