我遇到的问题是我的POST没有在网络服务器上被点击。它将进入我的控制器的构造函数,但不会进入我设置的post方法。
这是我设置的路线
routes.MapScopedHttpRoute(
name: "AliasesApi",
routeTemplate: "api/aliases/{controller}/{id}",
@namespace: "Test.WebApi.Aliases",
defaults: new { id = RouteParameter.Optional });
这是控制器
public IResponseModel Post(AliasTreeItem node)
{
...
}
被调用的URL在下面,它定义为POST
http://localhost:61265/api/aliases/alias?_dc=1439962373744
有人可以看到这个有什么问题吗?
我的Get方法被点击而不是这个Post方法。
答案 0 :(得分:0)
但你的帖子有一个名为node的参数,在url中你有一个参数_dc(名称需要相同),参数名称不同,同样,node是AliasTreeItem类型,我认为是class,所以最好将数据发送到请求体中。
另外,为了测试我建议使用邮递员或提琴手。
答案 1 :(得分:0)
您需要将[FromBody]
属性添加到控制器操作中,如下所示:
public IResponseModel Post([FromBody]AliasTreeItem node)
{
...
}
这将告诉 WebApi 该路由期望正文中有AliasTeamItem
的POST请求。即使你没有在身体中发送任何东西,这也行,因为你的参考类型的空体内容将为空。
答案 2 :(得分:0)
所以只是围绕这一个。我在GET方法上使用路由属性,因为我有两个GET请求。我只有一个PUT请求,所以我没有在该方法上添加路由请求。结果我需要那种方法。我的3种方法如下,现在它们似乎都正常工作。
// GET /api/aliases/alias
[Route(Order = 1)]
public IResponseModel Get(string id)
// GET /api/aliases/alias/simple
[Route("simple", Order = 2)]
public IResponseModel GetSimple(int page, int start, int limit, string query = null)
// POST /api/aliases/alias
[Route(Order = 3)]
public IResponseModel Post([FromBody]AliasTreeItem node)