获取键未找到的方法

本文关键字:方法 获取 | 更新日期: 2023-09-27 18:04:11

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

  • 通过GET: odata/Customers获取客户
  • Post(CustomerModel customer)通过Post: odata/Customers
  • 通过Delete: odata/Customers(5)删除

delete方法如下:

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 is:

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());
    }
}

获取键未找到的方法

方法名需要是Get才能被OData路由拾取:

Get([FromODataUri] int key)

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

  1. HttpMethodName + entityTypeName
  2. HttpMethodName

约定#1的优先级高于约定#2。

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

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

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

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

https://learn.microsoft.com/en-gb/odata/webapi/built-in-routing-conventions列出了Web API OData中使用的路由约定。希望能帮到你。谢谢。