如何将 null 值传递给 WebAPI 中的可空类型

How to pass null value to nullable types in WebAPI

我的函数如下:

        [HttpGet]
        [Route("Departments/{departmentid}/employeeByDeptId")]
        [ResponseType(responseType: typeof(IList<Employee>))]
        public HttpResponseMessage GetDetailsByDeptId(int departmentId, DateTime? sinceDate)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            var detailInfo = _employeeManager.GetDetailInfo(departmentId, sinceDate ?? _sinceDate);

            return CreateHttpResponseMessage(detailInfo);

        }

我在声明中将 sinceDate 设为 Nullable 类型,这样如果传递 null 值,它就会采用本地声明的“_sinceDate”变量中的日期。 现在如何在进行 API 调用时将空值传递给 sinceDate 参数。

当我从下方经过时url: http://localhost:26754/v1/EmployeeMgnt/Departments/4/employeeByDeptId?sinceDate=2020-03-03

我得到了想要的结果。 现在我想将 sinceDate 作为 null 传递。我试过了 http://localhost:26754/v1/EmployeeMgnt/Departments/4/employeeByDeptId?sinceDate=null http://localhost:26754/v1/EmployeeMgnt/Departments/4/employeeByDeptId?sinceDate 为空

都给了错误的请求错误。请告诉我如何在 API 调用中为 sinceDate 分配空值?

只需在您的路由参数中添加 parameterName = null

public HttpResponseMessage GetDetailsByDeptId(int departmentId, DateTime? sinceDate = null){
}

然后在您的请求中,您可以只排除该参数并使用;

访问
http://localhost:26754/v1/EmployeeMgnt/Departments/4/employeeByDeptId

另一种选择是添加重载。让 2 个函数名称接收不同的参数。

public HttpResponseMessage GetDetailsByDeptId(int departmentId, DateTime sinceDate){
}

public HttpResponseMessage GetDetailsByDeptId(int departmentId){
}

据我所知,对于阅读本文的任何人来说,已接受的答案(本身)不再有效。有关更多详细信息和 2 种不同的替代方法,请参阅 https://github.com/dotnet/aspnetcore/issues/6878#issuecomment-647830903