【发布时间】:2013-11-29 02:35:19
【问题描述】:
几天以来,我一直在尝试创建自己的 Web api 控制器。根据其他约定,我需要使用发布请求来创建对象。具体来说,我有这个控制器有这个动作:
public class ReservationController : ApiController
{
[HttpPost]
public void Create(int roomId, DateTime arrivalDate)
{
//do something with both parameters
}
}
当我向它发出 post 请求时,此代码不起作用,我收到如下 404 异常:
在控制器“Some”上找不到与请求匹配的操作。
原因是从查询字符串中读取简单类型,从正文中读取复杂类型,根据aricle。 Web api 使用参数将操作与请求匹配,因此无法将我的操作映射到请求。
我确实知道我可以使用 [frombody] 标签,但您只能将其应用于一个参数,而我有 2 个。我也知道我可以创建一个包含两个参数的包装器对象,但我是不愿意为我的所有电话使用包装器。
所以我知道我可以通过这些方法解决这个问题。我也认为这是由于 post 请求的正文只能读取一次造成的。但我的实际问题是:
为什么参数的来源是由它的类型而不是由它的可用性决定的,尤其是当约定规定您应该发出例如创建的 post 请求时?在MVC中是这样,为什么web api中没有呢?
最好的问候,
BHD
最终更新 由于我得到了一些支持,可能更多的人面临同样的问题。最后是这样的:Web-Api != MVC。这根本不是一回事,我猜 web api 团队做出了与 mvc 团队不同的设计决策。
【问题讨论】:
标签: c# asp.net rest asp.net-web-api model-binding