【问题标题】:How to set route path correctly in Asp.Net Web Api如何在 Asp.Net Web Api 中正确设置路由路径
【发布时间】:2016-11-28 13:14:50
【问题描述】:

http://xxxx/api/garmin/data 抛出以下错误

找不到与名为“garmin”的控制器匹配的类型。

下面是Global.asax中的代码

void Application_Start(object sender, EventArgs e) 
{
     RouteTable.Routes.MapHttpRoute(
        name: "ControllerAndAction",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = System.Web.Http.RouteParameter.Optional }
     );

     GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "json", new MediaTypeHeaderValue("application/json")));
     GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "xml", new MediaTypeHeaderValue("application/xml")));
}

控制器代码

public class GraminController : ApiController
{
    // GET
    [HttpGet]
    [ActionName("data")]
    public string GetGarminData()
    {
        return "value";
    }
}

以上代码在开发服务器上运行,但抛出以下错误

未找到与请求匹配的 HTTP 资源 URI 'http://xxxx/api/garmin/data'。无类型 发现与名为的控制器匹配 '佳明'。

我做错了什么?我该如何解决这个错误?

【问题讨论】:

  • 是的,在 Fiddler 中提到了 'Content-Type: application/json; charset=utf-8' 我正在尝试使一个简单的 GET 请求工作,但这也失败了。

标签: c# asp.net asp.net-web-api routing


【解决方案1】:

您的控制器名称Gramin,但您正尝试使用garmin 访问它。以这种方式映射您的路线

public class GraminController : ApiController
{
    // GET
    [HttpGet]
    [Route("api/garmin/data")]
    public string GetGarminData()
    {
        return "value";
    }
}

或者如果你想用你的方式打电话

http://xxxx/api/gramin/data

【讨论】:

  • 谢谢Mostafiz .....我不知何故错过了。如此愚蠢的错误。它现在正在工作。简单的拼写错误的原因,花了几个小时试图排除故障。非常感谢。
  • 我可以问一个问题吗...在上面的代码中 [Route ...] 我无法定义 [Route] attritube。我需要导入命名空间吗?
  • System.Web.Http命名空间,或直接System.Web.Http.Route()
  • 感谢 Mostafiz,由于某种原因似乎无法导入 System.Web.Http.Route,我得到的唯一导入命名空间是 System.Web.Http.Routing。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2019-02-18
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多