asp.net-web-api - 向 API 发送带有空参数的特定请求时遇到问题
问题描述
这是我在 .Net Core 2.1 中构建的控制器示例。
[Route("api/TestApi")]
public class TestApiController: Controller
{
[HttpGet("{param1?}/{param2?}/{param3?}")]
//[HttpGet]
public ActionResult Get(int? param1 = null, DateTime? param2 = null, bool? param3 = null)
{
//Get data ...
}
}
我对这个设置的问题是我不能用空参数调用这个函数;这种调用不起作用:http://localhost:9000/api/TestApi/null/null/true。它会给我一个错误,指出 null 不是 param1 的有效输入。
现在我不能依赖从查询字符串(公司约束)中读取参数,但我想指出,如果我使用 [HttpGet] 并使用 url 参数,它确实有效。
有任何想法吗?建议?问题?一切都会受到欢迎。
提前致谢。
解决方案
我找到了一个可以使用的补丁。
它涉及在 Startup.cs 文件中添加一个中间件。
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = false;
options.InvalidModelStateResponseFactory = actionContext =>
{
if (
!string.IsNullOrEmpty(actionContext.ActionDescriptor.AttributeRouteInfo.Template)
&& actionContext.ActionDescriptor.AttributeRouteInfo.Template.Contains("?"))
{
//Hard coded removed bad error if template has int?/double?/datetime?
return null;
}
else
{
var errors = actionContext.ModelState
.Where(e => e.Value.Errors.Count > 0)
.Select(e => new Error
{
Name = e.Key,
Message = e.Value.Errors.First().ErrorMessage
}).ToArray();
return new BadRequestObjectResult(errors);
}
};
});
我终于设法使用了我在问题中指定的 URL; http://localhost:9000/api/TestApi/null/null/true
同样,这不是一个可靠的解决方案,只是一种解决方法。
推荐阅读
- mongodb - 如何在mongoDB中获取记录计数分组字段值?
- c# - 弹出窗口关闭后,应刷新主页以加载更改的数据
- android - Android Beacon Library not seeing any beacons
- swift - Change barbutton image
- mysql - How to take some rows in the manual order and then rest in the regular way
- url - 当 URL 包含下划线时,松弛消息“链接按钮”不显示
- jquery - How to assign dynamically fetched variable to HREF, Jquery, laravel
- api - How to compose requests for communication between Java back-end and 3rd party GraphQL API?
- google-cloud-platform - 使用部署管理器的 GKE 抢占式虚拟机
- c - 使用递归找到方程的所有解