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.映射结果
在这里插入图片描述

上面类的映射太过繁琐,还能通过工具实现

  1. 安装第二个
    在这里插入图片描述
    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);
       }
posted @ 2021-07-12 21:45  有诗亦有远方  阅读(12)  评论(0)    收藏  举报  来源