为什么我的Web API路由不起作用?

时间:2014-03-11 09:55:31

标签: asp.net asp.net-mvc asp.net-routing asp.net-web-api-routing

我的api中有以下代码:

  public static void Register(HttpConfiguration config)
    {


        // Web API routes
        config.MapHttpAttributeRoutes();

        //Set default content to json
        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

        config.Routes.MapHttpRoute(
              name: "DefaultApi2",
              routeTemplate: "api/{controller}/{action}/{id}",
              defaults: new { id = RouteParameter.Optional }
          );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

以下是我尝试连接的conreoller和action方法:

  [Authorize]
public class DeviceConnectionController : ApiController
{        
    [HttpGet]
    public string Status(int deviceId)
    {
        string stats = "1234:";
        stats += FSK_APNLink.ConnectionStatus.Connected.ToString();
        return stats;
    }
}

现在,以下获取请求为我提供了404:

http://localhost:50000/api/deviceconnection/status/45

但是如果我从action方法中删除参数,则以下命令正确执行:

http://localhost:50000/api/deviceconnection/status

1 个答案:

答案 0 :(得分:2)

有一个名为id的可选参数,它由路径与方法参数列表匹配。唯一的方法参数称为deviceId,因此它没有任何值。您需要在方法签名或路径模板中重命名参数。