这是我在.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 ...
}
}
我的设置问题是我无法使用null参数调用此函数; 这种呼叫将不起作用:http://localhost:9000/api/TestApi/null/null/true。这将给我一个错误,指出null不是param1的有效输入。
现在,我不能依靠从查询字符串中读取参数(公司约束) 但我想指出的是,如果我改用[HttpGet]并使用url参数,它确实可以工作。
有什么想法吗?建议?有问题吗? 一切都会受到欢迎。
谢谢。
答案 0 :(得分:0)
我找到了要使用的补丁。
它涉及在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);
}
};
});
我终于设法使用了我在问题中指定的网址; http://localhost:9000/api/TestApi/null/null/true
同样,这不是一个可靠的解决方案,只是一种解决方法。