记录学习B站杨旭课程.NET CORE 3.0API时的一些收获

记录一下学习B站杨旭课程(API)时一些之前不清楚的东西。

1.如果写一个类似意义的API时(查询某个公司下的某个员工)
那么RESTful的写法是:api/companies/{companyid}/employees/{employeeid}。

2.[ApiController]
·这个属性是应用于Controller的,他其实并不是强制的。
·会启用以下行为:
·要求使用属性路由(Attribute Routing),会导致endpointing失效。
·自动HTTP400响应。
·推断参数的绑定源。
·Multipart/form-data 请求推断。
·错误状态代码的问题详细信息。
3.PUT和PATCH
PATCH 用于更新部分资源(比如一个公司的几个字段)
PUT用于更新全部资源(比如一个公司的全部字段,除Id外)但是PUT也可以用来创建资源。
记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第1张图片
4.状态码。
201-请求成功并创建了资源
3xx-表示跳转
5.Http安全性和幂等性
记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第2张图片
6.创建一个资源后,可以用CreatedAtRoute(nameof(GetCompany),new{companyId = dto.Id}, dto);
此方法第一个参数为获取此资源的url,第二个参数为获取此资源的url的所需参数,第三个参数为当前返回的body。 此方法返回的状态码为201。
7.[FromRoute]和[FromQuery]
[fromquery] 请求查询字符串参数(用来推断其它的Action参数)
[fromroute] 当前请求中的路由数据(用来推断Action的参数名和路由模板中的参数名一致的情况)
感觉是不是fromquery用于搜索,条件查询。然后fromroute用于获取资源好一些。
8.ModelBinder
场景:根据多个id获取公司列表。

//控制器代码:
[HttpGet("{ids}")]
public async Task GetCompanyCollection(
	[FromRoute]
	[ModelBinder(BinderType = typeof(ArrayModelBinder))
	Ienumerable ids]
)

//ModelBinder代码:
public Class ArrayModelBinder:ImodelBinder
	public Task BindModelAsync(ModelBindingContext bindingContext)
	{	
		bindingContext.Result = ModelBindingResult.Faild()
		return Task.CompletedTask;
	}
	var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).ToString();
	if(string.IsNullOrWhiteSpace(value))
	{
		bindingContext.Result = ModelBindingResult.Success(null);
		return Task.CompletedTask;
	}
	var elementType = bindingContext.ModelType.GetTypeInfo().GenericTypeArguments[0];
	var converter = TypeDescriptor.GetConverter(elementType);
	var values = value.split(new []{","}, StringSpilOptions.RemoveEmptyEntries.Select(x=>converter.ConvertFromString(x.Trim())).ToArray();
	var typeValues = Array.CreateInstance(elementType,values.Length);
	values.CopyTo(typedValues,0);
	binding.Model = typeValues;
	bindingContext.Result = ModelBingdingResult.Success(bindingContext.Model);
	return Task.CompletedTask;

9.记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第3张图片
10.当需要验证dto中多个属性间的关系时,可以实现IValidatableObject接口。(当特性的验证都通过后会进行他的验证)。
记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第4张图片
11.CustomAttribute进行验证
记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第5张图片
12.自定义报告错误信息
记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第6张图片
13.复杂验证信息可以使用FluentValidation。
14.HttpPut中未设置属性应该设置为默认值。
15.Guid的一个用途:可以在客户端指定ID用于创建资源。
16.分页中的size可以这样写:记录学习B站杨旭课程.NET CORE 3.0API时的一些收获_第7张图片
17.后面的排序和数据塑形改天再学。

你可能感兴趣的:(记录学习B站杨旭课程.NET CORE 3.0API时的一些收获)