我无法使Web API 2属性路由工作。 我一直在尝试整个晚上都可以找到的一切,但我找不到问题。
我想要实现的目标如下:
向http://localhost:xxxx/api/chat/joingroup/1234
发出POST请求以进入以下API调用:
[Route("joingroup/{id}")]
[HttpPost]
public async Task<IHttpActionResult> JoinGroup(string id, string connectionID)
{
await hubContext.Groups.Add(connectionID, id);
return Ok(hubContext.Groups.ToString());
}
这让我不断收到一条http 400消息。
{"message":"No HTTP resource was found that matches the request URI 'http://localhost:41021/api/chat/joingroup/123'.",
"messageDetail":"No action was found on the controller 'Chat' that matches the request."}
但是发送帖子到:http://localhost:41021/api/chat/sendmessage/pm/123123
和http://localhost:41021/api/chat/joingroup
给了我一个200
聊天控制器:
[RoutePrefix("api/chat")]
public class ChatController : ApiController
{
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
[...]
[Route("joingroup/{id}")]
[HttpPost]
public async Task<IHttpActionResult> JoinGroup(string id, string connectionID)
{
await hubContext.Groups.Add(connectionID, id);
return Ok(hubContext.Groups.ToString());
}
到http://localhost:xxxx/api/chat/sendmessage
的HTTP POSTS工作正常。
当我在http://localhost:xxxx/api/chat/joingroup/1234
上调用POST时,我无法弄清楚为什么它没有采用正确的方法。
SOLUTION:
解决方案是引用JoinGroup方法,id和connectionID中所需的两个值。现在请求将命中此方法。
使用:
http://localhost:xxxx/api/chat/joingroup/john?connectionid=123
可以使用。
答案 0 :(得分:1)
我注意到你发送的代码有两件事:
如果connectionID是可选的,您可以修改方法以使用选项al参数,例如
public string JoinGroup(string id, string connectionID = "")
如果有帮助,请告诉我。 谢谢 阿什拉夫
答案 1 :(得分:1)
我假设connectionID
参数引用了POSTed数据。最简单的方法是使用[FromBody]
属性对其进行修饰,并在发送的值前添加=
,如下所示:=MyConnection1
。
Web API需要具有属性的对象或其他数组。或者,您可以使用自定义类包装连接ID,并将其序列化为JSON / XML。