C# ApiController中HttpGet多参数传递报错,如何解决?
问题解决
1. 请求URL参数格式错误
你用了多个?分隔查询参数,这违反HTTP规范。正确格式是:第一个参数用?起始,后续所有参数必须用&分隔。
错误URL:
https://localhost:44328/api/rule/GetRuleNew?locale=e?pno=2?modelYear=1
正确URL:
https://localhost:44328/api/rule/GetRuleNew?locale=e&pno=2&modelYear=1
2. 路由配置的潜在问题(非当前报错直接原因)
你的DefaultApiWithId路由对id设置了数字约束(@"\d+"),但GetRule(Guid id)方法接收Guid类型参数,这个路由永远匹配不到该方法。如果要通过Guid访问GetRule,可以新增一个针对Guid的路由并调整顺序:
// 放在DefaultApiWithId路由之前 config.Routes.MapHttpRoute( name: "DefaultApiWithGuid", routeTemplate: "Api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { id = @"^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$" } );
修正URL后,GetRuleNew的参数会正确绑定,接口即可正常响应。
内容的提问来源于stack exchange,提问作者CodingLittle
相关产品推荐
相关产品推荐

