记录学习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也可以用来创建资源。
各种HTTP请求方法
4.状态码。
201-请求成功并创建了资源
3xx-表示跳转
5.Http安全性和幂等性
它解释了为什么用Get来获取资源而不是用Get来创建或修改资源
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<IactionResult> GetCompanyCollection(
	[FromRoute]
	[ModelBinder(BinderType = typeof(ArrayModelBinder))
	Ienumerable<Guid> 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.在这里插入图片描述
10.当需要验证dto中多个属性间的关系时,可以实现IValidatableObject接口。(当特性的验证都通过后会进行他的验证)。
在这里插入图片描述
11.CustomAttribute进行验证
在这里插入图片描述
12.自定义报告错误信息
在这里插入图片描述
13.复杂验证信息可以使用FluentValidation。
14.HttpPut中未设置属性应该设置为默认值。
15.Guid的一个用途:可以在客户端指定ID用于创建资源。
16.分页中的size可以这样写:在这里插入图片描述
17.后面的排序和数据塑形改天再学。

发布了4 篇原创文章 · 获赞 0 · 访问量 80

猜你喜欢

转载自blog.csdn.net/qq_42044608/article/details/104172548