Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api Web API 2属性路由返回404_Asp.net Web Api_Attributerouting - Fatal编程技术网

Asp.net web api Web API 2属性路由返回404

Asp.net web api Web API 2属性路由返回404,asp.net-web-api,attributerouting,Asp.net Web Api,Attributerouting,我很难让WebAPI2属性路由正常工作。 整个晚上我都在想尽一切办法,但我找不到问题所在 我希望实现以下目标: 向http://localhost:xxxx/api/chat/joingroup/1234获取以下API调用: [Route("joingroup/{id}")] [HttpPost] public async Task<IHttpActionResult> JoinGroup(string id, string connectionID) { await hub

我很难让WebAPI2属性路由正常工作。 整个晚上我都在想尽一切办法,但我找不到问题所在

我希望实现以下目标: 向
http://localhost:xxxx/api/chat/joingroup/1234
获取以下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://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());

    }
[RoutePrefix(“api/chat”)]
公共类聊天控制器:ApiController
{
IHubContext hubContext=GlobalHost.ConnectionManager.GetHubContext();
[...]
[路由(“joingroup/{id}”)]
[HttpPost]
公共异步任务JoinGroup(字符串id、字符串连接id)
{
wait hubContext.Groups.Add(connectionID,id);
返回Ok(hubContext.Groups.ToString());
}
HTTP发布到
http://localhost:xxxx/api/chat/sendmessage
工作正常。 当我在
http://localhost:xxxx/api/chat/joingroup/1234

解决方案:
解决方案是引用JoinGroup方法中需要的两个值id和connectionID。现在请求将命中此方法。 使用:
http://localhost:xxxx/api/chat/joingroup/john?connectionid=123
会起作用。

我注意到您发送的代码中有两件事:

  • 您发布到的路径是:localhost:xxxx/joingroup/1234,这是 应该是localhost:xxxx/api/chat/joingroup/1234
  • 因为joingroup有两个参数,所以需要同时传递这两个参数,可能类似于以下localhost:xxxx/api/chat/joingroup/1234?connectionID=值,也可以在请求主体上传递
  • 如果connectionID是可选的,则可以修改该方法以使用选项al参数,如下所示

    public  string JoinGroup(string id, string connectionID = "")    
    
    请让我知道这是否有帮助。 谢谢
    Ashraf

    我假设
    connectionID
    参数引用发布的数据。最简单的方法是使用
    [FromBody]
    属性对其进行修饰,并在发送的值前面放置一个
    =
    ,如下所示:
    =MyConnection1


    Web API需要具有属性或数组的对象。或者,您可以使用自定义类包装连接ID,并将其序列化为JSON/XML。

    谢谢!这很有效。我正在考虑只向方法发送JSON,让它与模型一起工作。
    public  string JoinGroup(string id, string connectionID = "")