我尝试了这篇文章中描述的解决方案: 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但仍然有动作/功能?
答案 0 :(得分:3)
ODataRoutingConventions.CreateDefault()
将创建路由约定列表 WITHOUT 属性路由。
虽然未绑定的操作和功能需要属性路由。
所以,你必须改为呼叫:
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/angular.js"></script>
<script type="text/javascript" src="js/node_modules/angular-route/angular-route.js"></script>
答案 1 :(得分:0)
如上所述,它使用默认的属性路由,但它也需要config和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);