Example #1
0
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            if (postAddResource == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(new MyUnprocessableEntityObjectResult(ModelState));
            }

            var newPost = _mapper.Map <PostAddResource, Post>(postAddResource);

            newPost.Author       = "admin";
            newPost.LastModified = DateTime.Now;

            await _postRepository.AddPost(newPost);

            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("Save Failed!");
            }

            var resultResource = _mapper.Map <Post, PostResource>(newPost);

            return(CreatedAtRoute("GetPost", new { id = newPost.Id }, resultResource));
        }
Example #2
0
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            if (postAddResource == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(new MyUnprocessableEntityObjectResult(ModelState));
            }

            var newPost = _mapper.Map <PostAddResource, Post>(postAddResource);

            newPost.Author       = "admin";
            newPost.LastModified = DateTime.Now;

            _postRepository.AddPost(newPost);

            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("Save Failed!");
            }

            var resultResource = _mapper.Map <Post, PostResource>(newPost);

            var links = CreateLinksForPost(newPost.Id);
            var linkedPostResource = resultResource.ToDynamic() as IDictionary <string, object>;

            linkedPostResource.Add("links", links);

            return(CreatedAtRoute("GetPost", new { id = linkedPostResource["Id"] }, linkedPostResource));
        }
Example #3
0
        public async Task <ActionResult> Post([FromBody] PostAddResource postResource)
        {
            if (postResource == null)
            {
                return(BadRequest());
            }

            //使用Fluent Validator
            var resultValidator = _validator.Validate(postResource);

            if (!resultValidator.IsValid)
            {
                //验证失败
                string ErrorMessage = string.Join(";", resultValidator.Errors);
                //  return new ObjectResult(new { code = 422, ErrorMessage = ErrorMessage });
                return(UnprocessableEntity(ErrorMessage));//422错误
            }
            var newPost = _mapper.Map <PostAddResource, Post>(postResource);

            newPost.Author       = "Admin";
            newPost.LastModified = DateTime.Now;

            _postRepository.AddPost(newPost);

            //工作单元
            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("save fields");
            }
            var resultResource = _mapper.Map <Post, PostResource>(newPost);

            //返回当前创建的内容,通过headers中的Localhost
            return(CreatedAtRoute("GetPost", new { Id = resultResource.Id }, resultResource));
        }
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            #region 数据合法性判断
            if (postAddResource == null)
            {
                return(BadRequest());
            }
            if (!ModelState.IsValid)
            {
                return(new MyUnprocessableEntityObjectResult(ModelState));
            }
            #endregion

            //从PostResource转换为PostEntity
            var newPost = mapper.Map <PostAddResource, Post>(postAddResource);
            //完善属性值
            newPost.Author       = "zhusir";
            newPost.LastModified = DateTime.Now;

            #region 向数据库添加数据
            postRepository.AddPost(newPost);

            if (!await unitOfWork.SaveAsync())
            {
                throw new Exception("保存失败");
            }
            #endregion

            //从postEntity转换为PostResource
            var resultResouce = mapper.Map <Post, PostResource>(newPost);

            #region 添加HATEOAS特性
            //为新添加的资源创建links属性
            var links = CreateLinksForPost(newPost.id);
            //向资源中添加links属性
            var linkedPostResource = resultResouce.ToDynamic() as IDictionary <string, object>;
            linkedPostResource.Add("links", links);
            #endregion
            //通过CreatedAtRoute()方法返回201代码,并且在Header中附带GET到新建资源的URI
            return(CreatedAtRoute("GetPost", new { id = linkedPostResource["id"] }, linkedPostResource));

            //var post = new Post
            //{
            //    Title = "Post Title add",
            //    Body = "Post Body add",
            //    Author = "zhusir",
            //    LastModified = DateTime.Now
            //};
            //postRepository.AddPost(post);
            //await unitOfWork.SaveAsync();
            //return Ok();
        }
Example #5
0
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            if (postAddResource == null)
            {
                return(BadRequest());
            }
            var newPost = _mapper.Map <PostAddResource, Post>(postAddResource);

            newPost.Author       = "admin";
            newPost.LastModified = DateTime.Now;

            _postRepository.AddPost(newPost);
            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("Save Failed");
            }
            var resultResource = _mapper.Map <Post, PostResource>(newPost);

            return(Ok(resultResource));
        }
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            if (postAddResource == null)
            {
                return(BadRequest());
            }

            #region 本来应该启动这个验证的,但是由于自定义问题reamke的问题导致,所以gg 2019.8.2已经重新迁移填坑
            if (!ModelState.IsValid)
            {
                //return UnprocessableEntity(ModelState);
                return(new MyUnprocessableEntityObjectResult(ModelState));
            }
            #endregion

            var newPost = _mapper.Map <PostAddResource, Post>(postAddResource);
            newPost.Author       = "admin";
            newPost.LastModified = DateTime.Now;

            //这里是个坑,因为之前迁移表的时候PostConfiguration类中设置了IsRequired()的子段导致了这个值现在不能为空
            //2019.8.2已经重新迁移填坑
            //newPost.Remark = "这里是个坑,因为之前迁移表的时候PostConfiguration类中设置了IsRequired()的子段导致了这个值现在不能为空";

            _postRepository.AddPost(newPost);

            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("save failed");
            }
            var resultReosurece    = _mapper.Map <Post, PostResource>(newPost);
            var links              = CreateLinksForPost(newPost.Id);
            var linkedPostResource = resultReosurece.ToDynamic() as IDictionary <string, object>;
            linkedPostResource.Add("Link", links);

            // return Ok(resultPost);
            return(CreatedAtRoute("GetPost", new { id = linkedPostResource["id"] }, linkedPostResource));
        }
Example #7
0
        public async Task <IActionResult> Post([FromBody] PostAddResource postAddResource)
        {
            if (postAddResource == null)
            {
                return(BadRequest());
            }
            //验证,不符合要求,返回状态码422,UNprocessable Entity
            if (!ModelState.IsValid)
            {
                //return UnprocessableEntity(ModelState);
                //自定义 错误返回
                return(new MyUnprocessableEntityObjectResult(ModelState));
            }

            var newPost = _mapper.Map <PostAddResource, Post>(postAddResource);

            newPost.Author       = "admin";
            newPost.LastModified = DateTime.Now;

            _postRepository.AddPost(newPost);

            if (!await _unitOfWork.SaveAsync())
            {
                throw new Exception("Save Failed!");
            }

            var resultResource = _mapper.Map <Post, PostResource>(newPost);

            var links = CreateLinksForPost(newPost.Id);
            var linkedPostResource = resultResource.ToDynamic() as IDictionary <string, object>;

            linkedPostResource.Add("links", links);

            //根据rest风格, 创建资源成功,返回的状态码为201,而且要返回获取当前创建的资源的uri
            return(CreatedAtRoute("GetPost", new { id = newPost.Id }, linkedPostResource));
        }