众所周知,在.NetCore WebApi中,Post方式的api接收参数时不能像Get那些,直接把接受参数写到方法后边括号内,如:
[HttpPost]
public string GetAreaGroupList(string id){
return id;
}
这个是因为api默认推理规则,绑定源推理,借助这些规则,无需通过将属性应用于操作参数来手动识别绑定源,其中几种规则为
[FromBody]针对复杂类型参数进行推断。但其不适用于具有特殊含义的任何复杂的内置类型,如IFormCollection和CancellationToken。
[FromForm]针对IFormFile和IFormFileCollection类型的操作参数进行推断。
[FromRoute]针对与路由模板中的参数相匹配的任何操作参数名称进行推断。
[FromQuery]针对任何其他操作参数进行推断。
但是有时不想这么复杂编写api,只想在括号内一个一个写接受参数,那就把默认推理规则关掉就好了。
.NetCore中禁用api推理规则,在Startup.cs ConfigureServices中这样写:
services.AddControllers(cfg => { cfg.Filters.Add(new ExceptionHandleAttribute()); })
.ConfigureApiBehaviorOptions(options =>
{
//options.SuppressConsumesConstraintForFormFileParameters = true;//禁用当[FromForm]属性批注时,推理multipart/form-data请求内容类型
options.SuppressInferBindingSourcesForParameters = true;//禁用api的推理规则,这样就支持post方式直接括号接受参数和model参数方式
});