asp.net 中讀取webapi中的post對象參數時候需要使用[FromBody],讀取get的參數要用到[FromUri]。
例如
[System.Web.Http.HttpGet] public object GetPage([FromUri]ProductSearchInput input) { ... }
[System.Web.Http.HttpPost] public bool TranslateApi([FromBody]TranslateInput input) { ... }
但是在.net core中post相同,但是get的時候不同,使用[FromQuery]
[HttpGet("/GetTest")] public async Task<string> Get([FromQuery] string projectCode) { ... }
在.net core 中如果post數據量太大或者參數過多會出現錯誤,可以通過在ConfigureServices注入設置解決。
public IServiceProvider ConfigureServices(IServiceCollection services) { //擴大接口能接收的post容量 services.Configure<FormOptions>(options => { options.ValueCountLimit = 2000; // 2000 items max options.ValueLengthLimit = 1024 * 1024 * 100; // 100MB max len form data }); return services.AddAbp<ProductWebHostModule>(); }
.net core 中可以自動將接口中post的json數據轉換成參數對象,如果json中沒有對象的某個字段,那么該字段會自動設置為null。這里需要注意,.net core嚴格執行參數檢查,所以post的json的字段數據類型需要與參數對象的字段數據類型一致,否則會導致整個自動反序列化失敗而使得整個參數對象的全部字段數據都為空。