Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 向API发送带有空参数的特定请求时出现问题_Asp.net Web Api_Asp.net Core_Http Get - Fatal编程技术网

Asp.net web api 向API发送带有空参数的特定请求时出现问题

Asp.net web api 向API发送带有空参数的特定请求时出现问题,asp.net-web-api,asp.net-core,http-get,Asp.net Web Api,Asp.net Core,Http Get,这是我在.NETCore2.1中构建的控制器的一个示例 [Route("api/TestApi")] public class TestApiController: Controller { [HttpGet("{param1?}/{param2?}/{param3?}")] //[HttpGet] public ActionResult Get(int? param1 = null, DateTime? param2 = null, bool? param3 = nul

这是我在.NETCore2.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不是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不应该是吗?可选(可空)操作方法参数应该在查询字符串中。为什么你的公司有这样的限制?修复了url。如果我使用查询字符串,则此场景不起作用。。只是把例子弄错了@Brad我不知道,这不是应该问的问题,这样放置空参数是不可能的吗?如果参数是可选的,则无需在[HttpGet]中命名。如果它们存在,MVC将从查询字符串中填充它们,否则它们将为null。诚然,我问你这个问题可能不太合适,但也许值得你问公司。我已经问过了,我知道在过去的几天里他们已经开始发展这种方式了。要问的重要问题是,我是否必须使用查询字符串输入才能使用空参数?