C# 带有Microsoft.OData.Edm.Date参数的OData函数导致Swashback出错
我将Swashback.OData 3.2.0和Swashback.Core 5.5.3集成到我的WepAPI-OData Web服务中,以生成Swagger文档。 当我尝试访问swagger端点时,出现以下异常,这似乎是由函数AppointsForUsers引起的,该函数采用了Microsoft.OData.Edm.Date类型的2个参数,而日期类型不包含时间组件。 当我注释掉注册函数中的var function=builder,function…部分时,一切正常, 当我将参数类型Microsoft.OData.Edm.Date替换为System.DateTimeOffset时,它也可以正常工作,但这不是我们/我们项目的解决方案C# 带有Microsoft.OData.Edm.Date参数的OData函数导致Swashback出错,c#,odata,swagger,swashbuckle,C#,Odata,Swagger,Swashbuckle,我将Swashback.OData 3.2.0和Swashback.Core 5.5.3集成到我的WepAPI-OData Web服务中,以生成Swagger文档。 当我尝试访问swagger端点时,出现以下异常,这似乎是由函数AppointsForUsers引起的,该函数采用了Microsoft.OData.Edm.Date类型的2个参数,而日期类型不包含时间组件。 当我注释掉注册函数中的var function=builder,function…部分时,一切正常, 当我将参数类型Micros
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<UserDTO>("Users");
builder.EntitySet<AppointmentDTO>("Appointments");
var function = builder.Function("AppointmentsForUsers");
function.ReturnsCollectionFromEntitySet<AppointmentDTO>("Appointments");
function.Parameter<Date>("FromDate");
function.Parameter<Date>("ToDate");
function.CollectionParameter<int>("UserIds");
config.MapODataServiceRoute(
routeName: "odata",
routePrefix: "odata",
model: builder.GetEdmModel());
}
}
public async Task<IHttpActionResult> AppointmentsForUsers(Date DateFrom, Date DateTo, Enumerable<int> UserIds)
{
...
}
有了这个解决方法,我仍然可以使用日期作为参数,例如。
任命FrusersDateFrom=2017-04-07,。。。。
实际参数包含一个时间组件,具体取决于时区,但在内部,我继续从DateTime进行日期隐式转换。虽然最初的问题仍然存在,但至少对我们来说效果很好。如果使用操作而不是函数可以解决问题。。。 您是否尝试使用接收ODataActionParameters对象的操作作为此处所述的参数 另一种选择是创建一个具有三个参数的模型,并将其作为ODataActionParameter传递
var function = builder.Action("AppointmentsForUsers");
function.ReturnsCollectionFromEntitySet<AppointmentDTO>("Appointments");
function.Parameter<ModelWithDatesAndUsers >("Model");
public class ModelWithDatesAndUsers
{
Date fromDate;
Date toDate;
Enumerable[int] userIds;
}
public async Task<IHttpActionResult> AppointmentsForUsers(ODataActionParameters parameters)
{
ModelWithDateAndUsers model= (ModelWithDatesAndUsers)parameters["Model"];
}
public async Task<IHttpActionResult> AppointmentsForUsers(ODataActionParameters parameters)
{
Date fromDate = (Date)parameters["FromDate"];
Date toDate = (Date)parameters["ToDate"];
Enumerable[int] UserIds= (Enumerable[int])parameters["UserIds"];
}
var function = builder.Action("AppointmentsForUsers");
function.ReturnsCollectionFromEntitySet<AppointmentDTO>("Appointments");
function.Parameter<ModelWithDatesAndUsers >("Model");
public class ModelWithDatesAndUsers
{
Date fromDate;
Date toDate;
Enumerable[int] userIds;
}
public async Task<IHttpActionResult> AppointmentsForUsers(ODataActionParameters parameters)
{
ModelWithDateAndUsers model= (ModelWithDatesAndUsers)parameters["Model"];
}