Ejemplo n.º 1
0
        public async Task <IActionResult> GetArticleByArticleId(Guid articleId, string fields,
                                                                [FromHeader(Name = "Accept")] string mediaType)//获取媒体类型的数值
        {
            //解析媒体资源类型
            if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parseMediaType))
            {
                return(BadRequest());
            }

            //确认是否存在该字段
            if (!_propertyCheckService.TypeHasProperties <ArticleDetailsViewModel>(fields))
            {
                return(BadRequest());
            }

            var article = await _articleService.GetArticleDetailsByArticleIdAsync(articleId);

            if (article.Id == Guid.Empty)
            {
                return(NotFound());
            }

            //expandoObject实质上是一个字典
            var result = article.ShapeData(fields) as IDictionary <string, object>;

            //判断媒体类型并返回不同的结果
            if (parseMediaType.MediaType == "application/vnd.company.hateoas+json")
            {
                var link = CreateLinksForArticle(articleId, fields);
                result.Add("links", link);
                return(Ok(result));
            }

            return(Ok(result));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Get(int autoId, [FromQuery] GasLogResourceParameters resourceParameters)
        {
            //var userId = User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;
            //if (userId == null)
            //{
            //    var errorMsg = "Cannot get author information with null user id";
            //    Log.Error(errorMsg);
            //    return BadRequest(errorMsg);
            //}

            //var user = _userManager.GetEntities().FirstOrDefault(u => u.Id == Guid.Parse(userId));
            //if (user == null)
            //{
            //    return OK(new List<ApiGasLog>());
            //}
            if (!string.IsNullOrEmpty(resourceParameters.OrderBy))
            {
                if (!_propertyMappingService.ValidMappingExistsFor <ApiGasLog, GasLog>(resourceParameters.OrderBy))
                {
                    return(BadRequest(new ApiBadRequestResponse(_propertyMappingService.ProcessingResult.GetWholeMessage())));
                }
                var mapDictionary = _propertyMappingService.GetPropertyMapping <ApiGasLog, GasLog>();
                resourceParameters.OrderBy = resourceParameters.OrderBy.GetMappedSortClause(mapDictionary);
            }
            if (!string.IsNullOrEmpty(resourceParameters.Fields))
            {
                if (!_propertyCheckService.TypeHasProperties <ApiGasLog>(resourceParameters.Fields))
                {
                    return(BadRequest(new ApiBadRequestResponse(_propertyMappingService.ProcessingResult.GetWholeMessage())));
                }
            }
            var gasLogs = await _gasLogManager.GetGasLogsAsync(autoId, resourceParameters);

            if (!gasLogs.Any())
            {
                return(NotFound());
            }

            return(Ok(gasLogs));
        }
Ejemplo n.º 3
0
        [HttpHead] //httphead返回body,但状态码也是200
        //public async Task<ActionResult<IEnumerable<CompanyDto>>> GetCompanies(
        public async Task <IActionResult> GetCompanies([FromQuery] CompanyParameters parameters)
        //IActionResult可以用具体的实现类ActionResult<T>,返回的类型明确
        {
            //return 400
            if (!_propertyMappingService.ValidMappingExistsFor <CompanyDto, Company>(parameters.OrderBy))
            {
                return(BadRequest());
            }

            //return 400
            if (!_propertyCheckService.TypeHasProperties <CompanyDto>(parameters.Fields))
            {
                return(BadRequest());
            }

            var companies = await _companyRepository.GetCompaniesAsync(parameters);

            //var previousLink = companies.HasPrevious
            //    ? CreateCompaniesRessourceUri(parameters, ResourceUriType.PreviousPage)
            //    : null;

            //var nextLink = companies.HasNext
            //    ? CreateCompaniesRessourceUri(parameters, ResourceUriType.NextPage)
            //    : null;

            var paginationMetaData = new
            {
                totalCount  = companies.TotalCount,
                pageSize    = companies.PageSize,
                currentPage = companies.CurrentPage,
                totalPages  = companies.TotalPages,
                //previousPageLink =previousLink,
                //nextPageLink =nextLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetaData,
                                                                          new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping  //不      转义
            }));
            //var companiesDto = new List<CompanyDto>();
            //replaced by Linq

            //foreach (var company in companies)
            //{
            //    companiesDto.Add(new CompanyDto
            //    {
            //        Id=company.Id,
            //        Name = company.Name
            //    });
            //}

            //companies.ToList().ForEach(company=>companiesDto.Add(new CompanyDto
            //{
            //    Id = company.Id,
            //    CompanyName  = company.Name
            //}));

            //Auto mapper



            var companiesDtos = _mapper.Map <IEnumerable <CompanyDto> >(companies);

            var shapedData = companiesDtos.ShapeData(parameters.Fields);
            // return new JsonResult(companies);  //return Json


            var links = CreateLinksForCompany(parameters, companies.HasPrevious,
                                              companies.HasNext);

            //对于集合资源,返回对象有这些属性
            //{value:[xxx]集合,links

            var shapedCompaniesWithLinks = shapedData.Select(c =>
            {
                var companyDict  = c as IDictionary <string, object>;
                var companyLinks = CreateLinksForCompany(
                    (Guid)companyDict["Id"],
                    null);
                companyDict.Add("links", companyLinks);
                return(companyDict);
            });


            var linkedCollectionResource = new
            {
                value  = shapedCompaniesWithLinks,
                paging = links
            };

            return(Ok(linkedCollectionResource));
        }