【问题标题】:ASP.NET Web API Error: No HTTP resource was found that matches the request URLASP.NET Web API 错误:未找到与请求 URL 匹配的 HTTP 资源
【发布时间】:2015-09-14 23:52:21
【问题描述】:

我检查了其他在这里询问和回答的 sulotion sugessions,但仍然找不到我自己的代码有什么问题。

我有一个 'members' 和 'fals'(意思是 blogpost 之类的东西)控制器。每个成员都有自己的多个“fals”记录,所以我想列出“fals”属于特定成员。

我想在我的 Web API 中添加一个自定义操作来完成这项工作,就是这样:

    [HttpGet, ActionName("fals"), Route("members/{id}/fals")]
    public IQueryable<Fal> fals(int id)
    {
        Member member = db.Members.Find(id);
        return member.Fals();
    }

所以,这里是 WebApiConfig 自定义:

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

我知道有两条路线,即使我评论或取消评论第二条路线它也不会改变。

当我尝试调用http://localhost:51601/api/members/1/fals URL 时,它显示:

{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost:51601/api/members/1/fals'.",
"MessageDetail": "No action was found on the controller 'Members' that matches the name 'fals'."}

ID 1 存在,因为我粘贴的代码 fals 存在,但无法弄清楚。

谢谢!

【问题讨论】:

  • 如果从方法中删除“Route”属性会发生什么?例如[HttpGet, ActionName("fals")]
  • 刚刚删除它,现在它看起来可以工作了!我虽然它是必需的,但是,意识到它不是。谢谢。
  • 我猜它覆盖了默认路由,所以你可能会发现,如果你把路由放回去,但在没有 /api/ 部分的 URL 的情况下调用它也会起作用。我不确定您是否也使用了属性路由,如果没有,Route 属性如何与传统路由交互,所以有点猜测 - 我会添加它作为答案。跨度>

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


【解决方案1】:

我不确定您是否使用属性路由,但请尝试从控制器操作中删除 Route 属性。

[HttpGet, ActionName("fals")]

如果路由“干扰”了传统路由,我希望这会起作用,或者您也可以尝试在没有 /api/ 部分的情况下调用 URL,因为它从您在属性中指定的路由中丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多