无法将带有空参数的特定请求发送到 API
Trouble sending a specific request with null parameters to an 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
同样,这不是一个可靠的解决方案,只是一个解决方法。
这是我在 .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
同样,这不是一个可靠的解决方案,只是一个解决方法。