0

所以,我的 API 中有 3 种方法:

public List<FlatResponse> GetFlats()
public Flat Reserve(int id, int customerId, string service)
public List<FlatResponse> SearchFlats(double budget, double surface)

现在,不知何故,对于每个响应,API 都使用该GetFlats()方法。

也许我使用了错误的网址?

要预订公寓,我使用

myUrl.com/api/flats/?id=1&customerId=2&service=someservice

. 要搜索特定的公寓,我使用

myUrl.com/api/flats/?budget=500&surface=30

我究竟做错了什么?

编辑:

我的项目可能结构不正确。虽然它适用于另一个 API。

我的平面控制器类

 public class FlatsController : ApiController
    {
        public List<FlatResponse> GetFlats()
        {
            ...

        }

        public Flat Reserve(int id, int customerId, string service)
        {
            ...
        }

        public List<FlatResponse> SearchFlats(double budget, double surface)
        {
           ...
        }
    }

平面响应类

public class FlatResponse
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public string Street { get; set; }
        public int HouseNumber { get; set; }
        public int PostalCode { get; set; }
        public string City { get; set; }
        public double RentalPrice { get; set; }
        public double Surface { get; set; }
        public int ContractTime { get; set; }
        public DateTime StartDate { get; set; }
        public List<string> Facilities { get; set; }
        public string ContactPersonName { get; set; }
        public string ContactPersonEmail { get; set; }
        public string ContactPersonTelephone { get; set; }
        public bool Reserved { get; set; }
        public string DetailUrl { get; set; }
        public string ImageUrl { get; set; }
    }
4

2 回答 2

3

我认为问题可能在于您没有覆盖约定:GetFlats 将“get”作为前缀,因此它是对 GET 请求的调用。

尝试使用动词属性,以覆盖约定:

[HttpGet] public List<FlatResponse> GetFlats()
[HttpGet] public Flat Reserve(int id, int customerId, string service)
[HttpGet] public List<FlatResponse> SearchFlats(double budget, double surface)

问候,

于 2013-01-02T17:24:10.627 回答
2

从您的代码中,我可以将 Flat 关联为具有 3 个 get 方法的实体。但是从定义上看,除了 GetFlats 方法外,其他方法并没有按照约定告诉 MVC API 控制器它们是 get 方法。要启用此功能,请按照 @Hugo 回答前缀 [HttpGet] 属性或使用 getReserve 之类的 get 为方法定义添加前缀(?可能是方法名称应该更改)。

做完之后,

myUrl.com/api/flats/?id=1&customerId=2&service=someservice

应该调用 GetReserve 和

myUrl.com/api/flats/?budget=1&surface=2

应该调用 GetSearchFlats。

于 2013-01-02T17:37:14.053 回答