无法在Web Api OData中实现多个GET方法

时间:2015-01-31 11:30:40

标签: asp.net-web-api odata


我将OData V3与MVC4 Web API项目.NET4一起使用。
WebAPI寄存器方法是:

public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling =
                  Newtonsoft.Json.PreserveReferencesHandling.None;

            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<ClientModel>("ODClient");
            builder.ComplexType<ClientStatus>();
            builder.ComplexType<ClientType>();

            var edmmodel = builder.GetEdmModel();

            config.Routes.MapODataRoute(
                    routeName: "odata",
                    routePrefix: "odata",
                    model: edmmodel
            );
        }

OData控制器是:

        [HttpGet]
        [Queryable(AllowedQueryOptions = AllowedQueryOptions.All, PageSize = 25)]
        public IQueryable<ClientModel> Get() 
        {
            var model = ...
            return model;
        }

        [HttpGet]
        public ClientModel Get([FromODataUri] int id)
        {
            return new ClientModel();
        }

    [HttpDelete]
    public void Delete([FromODataUri] int id)
    {
    }

此查询运行良好:
http://localhost:59661/odata/ODClient?$filter=id eq 3

但是这个问题不起作用:
http://localhost:59661/odata/ODClient(3)
它执行所有项目的第一个GET查询。

删除也不起作用(请求类型为DELETE):
http://localhost:59661/odata/ODClient(3)

收到的错误是:
&#34;未找到与请求URI匹配的HTTP资源&#39; http://localhost:59661/odata/ODClient(12)&#39;。&#34;

1 个答案:

答案 0 :(得分:0)

根据问题评论,问题在于默认路由约定为参数指定名称的方式。密钥实际上被赋予默认名称&#34; key&#34;所以切换到那个工作。

可以通过创建自定义路由约定来自定义名称,该约定使用&#34; id&#34;填充路由数据表。值,或使用基于属性的路由,在这种情况下,参数名称可以匹配路径模板中指定的名称。