Asp.net web api WebAPI URL未按预期进行路由

Asp.net web api WebAPI URL未按预期进行路由,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我在WebAPI控制器中定义了以下两种方法: public class SocketController : ApiController { [HttpGet] [Route("api/socket")] public List<SocketInfo> GetAllSockets() { throw new Exception("Not Implemented; Use API/Socket/{Config

我在WebAPI控制器中定义了以下两种方法:

public class SocketController : ApiController
{
    [HttpGet]
    [Route("api/socket")]
    public List<SocketInfo> GetAllSockets()
    {
        throw new Exception("Not Implemented; Use API/Socket/{ConfigId} to request a specific socket.");
    }

    [HttpGet]
    [Route("api/socket/{Id}")]
    public SocketInfo GetSocket(string configId)
    {
        SocketInfo si = new SocketInfo();
        si.ConfigId = configId;
        si.Password = "****************";
        si.SystemName = "_SystemName";
        si.Type = Definitions.SocketType.DTS;
        si.Subtype = Definitions.SocketSubtype.PUT;

        return si;
    }
    ...
公共类SocketController:ApicController
{
[HttpGet]
[路由(“api/套接字”)]
公共列表GetAllSockets()
{
抛出新异常(“未实现;使用API/Socket/{ConfigId}请求特定套接字”);
}
[HttpGet]
[路由(“api/socket/{Id}”)]
公共SocketInfo GetSocket(字符串配置ID)
{
SocketInfo si=新的SocketInfo();
si.ConfigId=ConfigId;
si.Password=“****************”;
si.SystemName=“\u SystemName”;
si.Type=Definitions.SocketType.DTS;
si.Subtype=Definitions.SocketSubtype.PUT;
返回si;
}
...
正如所料,urlhttps://localhost:44382/API/Socket 返回异常:

<Error>
   <Message>An error has occurred.</Message>
   <ExceptionMessage>Not Implemented; Use API/Socket/{ConfigId} to request a specific socket. 
   </ExceptionMessage>
   <ExceptionType>System.Exception</ExceptionType>
   <StackTrace>
   ...

发生了一个错误。
未实现;使用API/Socket/{ConfigId}请求特定套接字。
系统异常
...
好的,让我们尝试按Id检索特定套接字:https://localhost:44382/API/Socket/ab24def6

但出于某种原因,这条路线并不可行。我得到的是:

<Error>
   <Message>No HTTP resource was found that matches the request URI 
           'https://localhost:44382/API/Socket/ab24def6'.
   </Message>
   <MessageDetail>No action was found on the controller 'Socket' that matches the request. 
   </MessageDetail>
</Error>

未找到与请求URI匹配的HTTP资源
'https://localhost:44382/API/Socket/ab24def6'.
在与请求匹配的控制器“套接字”上未找到任何操作。
有人知道为什么这不是路由吗?

试试这个:

[HttpGet,Route(“api/socket/{configId}”)]
公共SocketInfo GetSocket([FromRoute]字符串配置ID)
{
// ...
}

问题是您的参数名称与路由参数名称不匹配。
[FromRoute]
在本例中是可选的,但它使程序员更清楚数据的来源。

是的!我没有意识到参数名称是路由签名的一部分。现在一切正常。(谢谢!)@YossiGeretz——很高兴它成功了!