Esempio n. 1
0
        [HttpGet("{companyId}", Name = nameof(GetCompany))] //api/Companies/companyId
        //[Route("/{companyId}")]
        public async Task <IActionResult> GetCompany(Guid companyId, string fields, [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue mediaTypeValue))
            {
                return(BadRequest());
            }

            if (!_propertyCheckServices.HasProperty <CompanyDto>(fields))
            {
                return(BadRequest());
            }

            var company = await _service.GetCompanyAsync(companyId);

            if (company == null)
            {
                return(NotFound());
            }

            if (mediaTypeValue.MediaType == "application/vnd.company.hateoas.json")
            {
                var links = CreateLinksForCompany(companyId, fields);

                var resDic = CompanyProfile.InitializeAutoMapper().Map <CompanyDto>(company).ShapeData(fields) as IDictionary <string, object>;

                resDic.Add("Links", links);

                return(Ok(resDic));
            }

            return(Ok(CompanyProfile.InitializeAutoMapper().Map <CompanyDto>(company).ShapeData(fields)));
        }
Esempio n. 2
0
        [HttpHead]//不返回body即不返回数据内容
        //使用ActionResult<T>语义更准确
        public async Task <IActionResult> GetCompanies([FromQuery] CompanyParametersDto parameters)
        {
            if (!_propertyCheckServices.HasProperty <CompanyDto>(parameters.Fields))
            {
                return(BadRequest());
            }
            //throw new Exception("error");
            if (!_mappingService.ValidMappingExists <CompanyDto, Company>(parameters.OrderBy))
            {
                return(BadRequest());
            }

            var data = await _service.GetCompaniesAsync(parameters);

            var companyDto = CompanyProfile.InitializeAutoMapper().Map <IEnumerable <CompanyDto> >(data);

            var pageNationMetaData = new
            {
                data.PageSize,
                currentPage = data.CurrentPage,
                totalCount  = data.Count,
                totalPages  = data.TotalPages
            };

            Response.Headers.Add("x-pageNation", JsonSerializer.Serialize(pageNationMetaData, new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            }));

            var shapeData = companyDto.ShapeData(parameters.Fields);

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

            var shapeDataLinks = shapeData.Select(c =>
            {
                var companyDic = c as IDictionary <string, object>;

                var link = CreateLinksForCompany((Guid)companyDic["Id"], null);

                companyDic.Add("Links", link);

                return(companyDic);
            });

            var resource = new
            {
                value = shapeDataLinks,
                links
            };

            return(Ok(resource));
        }
Esempio n. 3
0
        public async Task <ActionResult <IEnumerable <CompanyDto> > > CreateCompanyCollections(IEnumerable <CompanyAddDto> companies)
        {
            var companyEntities = CompanyProfile.InitializeAutoMapper().Map <IEnumerable <Company> >(companies);

            foreach (var company in companyEntities)
            {
                _service.AddCompany(company);
            }

            await _service.SaveAsync();

            var data = CompanyProfile.InitializeAutoMapper().Map <IEnumerable <CompanyDto> >(companyEntities);

            var ids = string.Join(",", data.Select(m => m.Id));

            return(CreatedAtRoute(nameof(GetCompanyCollection), new { ids }, data));
        }
Esempio n. 4
0
        public async Task <IActionResult> CreateCompany(CompanyAddDto company)
        {
            var res = CompanyProfile.InitializeAutoMapper().Map <Company>(company);

            _service.AddCompany(res);

            await _service.SaveAsync();

            var companyDto = CompanyProfile.InitializeAutoMapper().Map <CompanyDto>(res);

            var links = CreateLinksForCompany(companyDto.Id, null);

            var returnDto = companyDto.ShapeData(null) as IDictionary <string, object>;

            returnDto.Add("Links", links);

            return(CreatedAtRoute(nameof(GetCompany), new { companyId = returnDto["Id"] }, returnDto));
        }
Esempio n. 5
0
        public async Task <ActionResult <IEnumerable <CompanyDto> > > GetCompanyCollection(
            [FromRoute][ModelBinder(typeof(ArrayModelBinder))] IEnumerable <Guid> ids)
        {
            if (ids == null)
            {
                return(BadRequest());
            }

            var entities = await _service.GetCompaniesAsync(ids);

            if (entities.Count() != ids.Count())
            {
                return(NotFound());
            }

            var companies = CompanyProfile.InitializeAutoMapper().Map <IEnumerable <CompanyDto> >(entities);

            return(Ok(companies));
        }