【问题标题】:asp.net web api attribute routingasp.net web api 属性路由
【发布时间】:2015-05-11 23:10:25
【问题描述】:

API

[RoutePrefix("api/diagnostics")]
public class DiagnosticsController : ApiController
{
    [HttpPost]
    [Route("pings")]
    public IHttpActionResult Pings(Ping ping)
    {

    }
}

Ping

public class Ping
{
   public Guid ServerKey {get;set;}
   public DateTime CreatedDateTime {get;set;}
}

我正在尝试使用 Postman 应用程序测试课程。这是Screenshot

我收到的信息是:

{
"message": "No HTTP resource was found that matches the request URI 'http://localhost:61668/api/diagnostics/pings'.",
"messageDetail": "No action was found on the controller 'Diagnostics' that matches the request."
}

我不明白为什么它与诊断控制器中的发布操作不匹配。唯一配置的其他路由是默认路由:

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

还启用了属性路由:config.MapHttpAttributeRoutes();

【问题讨论】:

  • 仔细查看您查询的 URL。屏幕截图与您的错误消息不对应。如果这是一个小疏忽:您绝对确定您的本地服务器在您发送请求的那一刻正在运行?如果停止调试,主机也会消失。
  • @Jeroen 这是一个疏忽。我再次发布了屏幕截图。是的,服务器正在运行。
  • 我不明白为什么你的代码不应该工作。您是否以某种方式缩小了问题范围?如果您的方法不采用Ping 对象,它是否有效?考虑使用可为空的值而不是 Guid/DateTime。你能用这些类作为最低限度创建一个新项目,然后它可以工作吗?

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


【解决方案1】:

尝试使用[FromBody] 属性标记您的参数 - public IHttpActionResult Pings([FromBody] Ping ping)

【讨论】:

  • 您可以尝试删除您的默认路线并仅离开config.MapHttpAttributeRoutes();吗?
猜你喜欢
  • 2017-08-16
  • 2014-07-01
  • 2013-07-10
  • 2014-09-23
  • 2017-03-24
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
相关资源
最近更新 更多