RESTful面向资源入门(1)
RESTful面向资源入门
1.HTTP状态码种类

2.内容协商与数据格式

1.在为startup中
services.AddControllers(setupAction=> {
setupAction.ReturnHttpNotAcceptable = true;//默认为false 如果为false那么所有api请求都会忽略请求的头部,都回复默认的数据结构
//setupAction.OutputFormatters.Add(
// //可以生成以xml为结构的数据了,而现在只是设置了输出的格式
// new XmlDataContractSerializerOutputFormatter()
// );
}).AddXmlDataContractSerializerFormatters();//这种输入输出都设置了
1.若不设置netcore默认的是忽略请求头此时默认的json格式,如下图,此时添加application/xml还是会得到json格式,不添加也是json格式
设置为true则会查看请求头。
2.在设置为true后 添加.AddXmlDataContractSerializerFormatters()
之后如下图划线出添加后,会转化为xml格式,此时吧application/xml变为application/json则会得到json格式,还原为application/xml格式就会输出xml格式

3.数据模型Model与数据传输对象DTO
(1)

1.model面向业务,dto面向界面,ui
2. 使用数据模型带来的两个不稳定因素
1.直接向前段返回数据模型会暴露业务的核心
2.颗粒度太粗,也就是输出数据无法精细调整
(2)Model与Dto的分离
1.创建一个与Model想类似的Dto数据模型

2.在controller中映射
[HttpGet("{touristRouteId}")]
public IActionResult GetTouristRouteById(Guid touristRouteId)
{
var touristRouteFromRepo = _touristRouteRepository.GetTouristRoute(touristRouteId);
if(touristRouteFromRepo == null)
{
return NotFound($"旅游路线{touristRouteId}找不到");
}
//此处为Model到Dto映射的实例
var touristRouteDto = new TouristRouteDto()
{
Id = touristRouteFromRepo.Id,
Title = touristRouteFromRepo.Title,
Description = touristRouteFromRepo.Description,
Price = touristRouteFromRepo.OriginalPrice * (decimal)(touristRouteFromRepo.DiscountPresent ?? 1),
CreateTime = touristRouteFromRepo.CreateTime,
UpdateTime = touristRouteFromRepo.UpdateTime,
Features = touristRouteFromRepo.Features,
Fees = touristRouteFromRepo.Fees,
Notes = touristRouteFromRepo.Notes,
Rating = touristRouteFromRepo.Rating,
TravelDays = touristRouteFromRepo.TravelDays.ToString(),
TripType = touristRouteFromRepo.TripType.ToString(),
DepartureCity = touristRouteFromRepo.DepartureCity.ToString()
};
return Ok(touristRouteDto);
}
3.映射结果

上面类的映射太过繁琐,还能通过工具实现
- 安装第二个
![在这里插入图片描述]()
2.创建映射类![在这里插入图片描述]()
3.映射语句的改变
[HttpGet("{touristRouteId}")]
public IActionResult GetTouristRouteById(Guid touristRouteId)
{
var touristRouteFromRepo = _touristRouteRepository.GetTouristRoute(touristRouteId);
if(touristRouteFromRepo == null)
{
return NotFound($"旅游路线{touristRouteId}找不到");
}
//var touristRouteDto = new TouristRouteDto()
//{
// Id = touristRouteFromRepo.Id,
// Title = touristRouteFromRepo.Title,
// Description = touristRouteFromRepo.Description,
// Price = touristRouteFromRepo.OriginalPrice * (decimal)(touristRouteFromRepo.DiscountPresent ?? 1),
// CreateTime = touristRouteFromRepo.CreateTime,
// UpdateTime = touristRouteFromRepo.UpdateTime,
// Features = touristRouteFromRepo.Features,
// Fees = touristRouteFromRepo.Fees,
// Notes = touristRouteFromRepo.Notes,
// Rating = touristRouteFromRepo.Rating,
// TravelDays = touristRouteFromRepo.TravelDays.ToString(),
// TripType = touristRouteFromRepo.TripType.ToString(),
// DepartureCity = touristRouteFromRepo.DepartureCity.ToString()
//};
var touristRouteDto = _mapper.Map<TouristRouteDto>(touristRouteFromRepo);
return Ok(touristRouteDto);
}



浙公网安备 33010602011771号