OData,方法得到密钥未找到

时间:2015-07-23 14:10:40

标签: c# .net asp.net-web-api odata

使用下面的代码,我可以点击(使用Fiddler):

  • 通过GET获取GetCustomers:odata / Customers
  • 通过POST发布(CustomerModel客户):odata / Customers
  • 通过DELETE删除:odata / Customers(5)

删除方法如下:

public IHttpActionResult Delete([FromODataUri] int key)
{
    Console.WriteLine(key);
}

我点击了方法,我得到了密钥,没问题。

但我没有使用密钥点击get方法(没有密钥的get方法没问题,我得到完整列表):

// GET: odata/Customers(5)
public IHttpActionResult GetCustomer([FromODataUri] int key)
{
    Console.WriteLine(key);
}

我收到此错误(通过Fiddler响应标头): HTTP / 1.1 404 Not Found

WebApiConfig是:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<CustomerModel>("Customers");
        builder.EntitySet<EmployeeModel>("Employees");
        config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: "odata",
            model: builder.GetEdmModel());
    }
}

2 个答案:

答案 0 :(得分:1)

方法名称需要由OData路由获取:

for (j in names(DTcars)) set(DTcars,
  i     = which(DTcars[[j]]>10),
  j     = j,
  value = tail(DTcars[[j]],1)
)

答案 1 :(得分:0)

通过Web API OData约定,它应该支持以下两个规则:

  1. HttpMethodName + entityTypeName
  2. HttpMethodName
  3. 约定#1的优先级高于约定#2。

    根据惯例,如果您只在控制器中定义以下操作,则会获得 404-NotFound

    GetCustomer([FromODataUri] int key)
    GetCustomers([FromODataUri] int key)
    

    否则,如果在控制器中至少定义以下一个操作,它应该可以工作:

    GetCustomerModel([FromODataUri] int key)
    Get([FromODataUri] int key)
    

    http://odata.github.io/WebApi/#03-02-built-in-routing-conventions列出了Web API OData中使用的路由约定。希望它可以帮到你。感谢。

相关问题