[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))); }
[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)); }
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)); }
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)); }
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)); }