没有元数据操作的 Odata 不起作用
Odata with no metadata actions not working
我在这里尝试了本文中描述的解决方案:
Original article
正如我所描述的:
var defaultConventions = ODataRoutingConventions.CreateDefault();
var conventions = defaultConventions.Except(
defaultConventions.OfType<MetadataRoutingConvention>());
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: model,
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);
一切正常,没有更多的元数据信息。标准请求工作正常,但未绑定的操作和功能不再工作我收到 404 响应。
我向 Odata 模型构建器注册操作,例如:
var validateEmailAction = builder.Action("ValidateEmail");
validateEmailAction.Parameter<string>("Email");
在控制器中我有:
[HttpPost]
[ODataRoute("ValidateEmail")]
public async Task<IHttpActionResult> ValidateEmail(ODataActionParameters parameters)
{
}
关于如何实现隐藏 Odatametada 但仍然 actions/functions 工作的任何建议?
ODataRoutingConventions.CreateDefault()
将创建一个路由约定列表 WITHOUT 属性路由。
而未绑定的操作和函数需要属性路由。
所以,您必须改为调用:
ODataRoutingConventions.CreateDefaultWithAttributeRouting();
如上所述,它通过使用带有属性路由的默认值来工作,但它也需要配置和 edm 模型属性。
var edmModel = builder.GetEdmModel();
var defaultConventions =ODataRoutingConventions.CreateDefaultWithAttributeRouting(config,edmModel);
var conventions = defaultConventions.Except(defaultConventions.OfType<MetadataRoutingConvention>());
var route = config.MapODataServiceRoute(
"odata",
null,
edmModel,
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);
我在这里尝试了本文中描述的解决方案: Original article
正如我所描述的:
var defaultConventions = ODataRoutingConventions.CreateDefault();
var conventions = defaultConventions.Except(
defaultConventions.OfType<MetadataRoutingConvention>());
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: model,
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);
一切正常,没有更多的元数据信息。标准请求工作正常,但未绑定的操作和功能不再工作我收到 404 响应。
我向 Odata 模型构建器注册操作,例如:
var validateEmailAction = builder.Action("ValidateEmail");
validateEmailAction.Parameter<string>("Email");
在控制器中我有:
[HttpPost]
[ODataRoute("ValidateEmail")]
public async Task<IHttpActionResult> ValidateEmail(ODataActionParameters parameters)
{
}
关于如何实现隐藏 Odatametada 但仍然 actions/functions 工作的任何建议?
ODataRoutingConventions.CreateDefault()
将创建一个路由约定列表 WITHOUT 属性路由。
而未绑定的操作和函数需要属性路由。
所以,您必须改为调用:
ODataRoutingConventions.CreateDefaultWithAttributeRouting();
如上所述,它通过使用带有属性路由的默认值来工作,但它也需要配置和 edm 模型属性。
var edmModel = builder.GetEdmModel();
var defaultConventions =ODataRoutingConventions.CreateDefaultWithAttributeRouting(config,edmModel);
var conventions = defaultConventions.Except(defaultConventions.OfType<MetadataRoutingConvention>());
var route = config.MapODataServiceRoute(
"odata",
null,
edmModel,
pathHandler: new DefaultODataPathHandler(),
routingConventions: conventions);