.NET Core控制器无法从查询字符串接收正确输入排查
问题分析与解决
问题核心是查询参数名称不匹配:
- Angular客户端
getInstitutionSettings方法中,传递的查询参数键为id - 但.NET Core的
Get控制器方法,接收参数的名称是instId([FromQuery] Guid instId),两者名称不一致,导致.NET无法正确绑定参数值,因此收到空GUID
而getAllInstitutionSettings能正常工作,是因为客户端传递的参数键id,和.NET控制器GetAll方法的参数名id完全匹配,参数绑定成功。
修正方案(二选一即可)
方案1:修改Angular客户端参数名,与.NET控制器对齐
getInstitutionSettings(institutionId: string): Promise<any | undefined> { return this.http .get<InstitutionSettingsModel>('https://localhost:7205/api/v1/Settings/get', { params: { instId: institutionId, // 将参数键从id改为instId }, }) .toPromise(); }
方案2:修改.NET控制器参数名,与客户端传递的参数键对齐
[HttpGet] [Route("get")] [EnableCors] [Produces("application/json")] [SwaggerResponse(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<IActionResult> Get([FromQuery] Guid id) // 将参数名从instId改为id { SettingsReadRequestModel req = new SettingsReadRequestModel() { Id = id, JsonWebToken = this.TestJwt, CancellationToken = CancellationToken.None }; if (id != Guid.Empty) { SettingsGetResponseModel res = await this.Service.GetSettingsAsync(req); return this.Ok(res.Institution); } else { return this.BadRequest(); } }
内容的提问来源于stack exchange,提问作者Riley Hughes
相关产品推荐
相关产品推荐

