我想要一个带有一些实用工具方法的UtilityController来在Microsoft Asp.NET中的Odata Api中提供数据。
目前,如果我想实现一个控制器,它基于某个实体,如Product
我将有一个ProductController
与EDMModelBuit
builder.EntitySet<Product>("Product");
如果它们属于Product
类型,则为其他类型。
builder.EntitySet<ProductGroup>("ProductGroup");
现在解决方案是什么?如果我想让UtilityController
这样的控制器的方法为GetAnyList
,GetOfferTypes
和PutNewEnumTypeInOfferBase
,我没有任何实用程序类型等,它只是与任何实体相关的实用数据或可能不是。 e.g
public class UtilityController : ODataController
{
private DbContext db = new DbContext();
public List<string> getOfferBase()
{
return UtilityService.GetOfferBase();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
然后我可以将此实用程序数据作为
http://localhost:47120/odata/Utility/getOfferBase
答案 0 :(得分:1)
未绑定的功能/操作符合您的要求。应用它们,您可以发送此类请求,但不需要实体集:
1. GET http://host/odata/getOfferBase
2. POST http://host/odata/PutNewEnumTypeInOfferBase
要添加未绑定的功能/操作,您需要执行以下操作:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Function
ActionConfiguration PutNewEnumTypeInOfferBase = modelBuilder.Action("PutNewEnumTypeInOfferBase");
PutNewEnumTypeInOfferBase .Parameter<string>("Title");
PutNewEnumTypeInOfferBase .ReturnsFromEntitySet<Movie>("Movies");
builder.Function("GetSalesTaxRate")
.Returns<double>()
.Parameter<string>("state");
更多信息,请参阅: https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/ https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataActionsSample/