POST请求全面剖析练习题回答

来源:7-10 【思考】阶段练习题

慕少6126089

2021-08-15

1. 什么是幂等性?什么是安全性?

幂等性,指同样的操作不管经过多少次调用,返回的数据、或者产生的效果都是一致的,而客户端可以重复调用并且获得同样的结果。
安全性是指,使用 GET 或者 HEAD 请求的时候,都只是读取资源,而不会改变资源。所以说,类似GET, 或者 HEAD这样只是读取资源的操作是安全的。

2. 如何使用 CreatedAtRoute()来创建一个简单的第三等级的成熟度?

return CreatedAtRoute(
    "GetTouristRouteById",
    new { touristRouteId = touristRouteToReture.Id },
    touristRouteToReture
);

3. 如何使用 ASP .NET Core 来做数据验证?

(1)给 dto 加上验证规则:

public class TouristRouteForCreationDto 
{
    [Required(ErrorMessage = "title 不可为空")]
    [MaxLength(100)]
    public string Title { get; set; }
    [Required]
    [MaxLength(1500)]
    public string Description { get; set; }
    ...
}

(2)属性级别数据验证。使用接口 IValidatableObject

public IEnumerable<ValidationResult> Validate(
  ValidationContext validationContext)
{
  if(Title == Description)
  {
      yield return new ValidationResult(
          "路线名称必须与路线描述不同",
          new[] { "TouristRouteForCreationDto" }
      );
  }
}

(3)类级别数据验证。

public class TouristRouteTitleMustBeDifferentFromDescriptionAttribute: ValidationAttribute
{
    protected override ValidationResult IsValid(
        object value, 
        ValidationContext validationContext
    )
    {
        var touristRouteDto = (TouristRouteForCreationDto)validationContext.ObjectInstance;
        if (touristRouteDto.Title == touristRouteDto.Description)
        {
            return new ValidationResult(
                "路线名称必须与路线描述不同",
                new[] { "TouristRouteForCreationDto" }
            );
        }
        return ValidationResult.Success;
    }
}

4. 什么是状态码422?如何输出状态码422?

IServiceCollection services 后面继续点


.ConfigureApiBehaviorOptions(setupAction => 
{
  setupAction.InvalidModelStateResponseFactory = context =>
  {
    var problemDetail = new ValidationProblemDetails(context.ModelState)
    {
        Type = "无所谓",
        Title = "发生了一个或多个错误",
        Status = StatusCodes.Status422UnprocessableEntity,
        Detail = "See the errors property for details.",
        Instance = context.HttpContext.Request.Path
    };
    problemDetail.Extensions.Add("traceId", context.HttpContext.TraceIdentifier);
    return new UnprocessableEntityObjectResult(problemDetail)
    {
        ContentTypes = { "application/problem+json" }
    };
  };
});
写回答

1回答

阿莱克斯刘

2021-08-22

回答正确!

0
0

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

978 学习 · 547 问题

查看课程