无法向API发送带有空参数的特定请求

时间:2018-06-28 18:31:11

标签: asp.net-web-api asp.net-core http-get

这是我在.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参数,它确实可以工作。

有什么想法吗?建议?有问题吗? 一切都会受到欢迎。

谢谢。

1 个答案:

答案 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

同样,这不是一个可靠的解决方案,只是一种解决方法。