【问题标题】:WebAPI no HTTP resource foundWebAPI 未找到 HTTP 资源
【发布时间】:2016-12-03 16:56:10
【问题描述】:

所以我设置了一个 ASP.NET WebAPI 应用程序,每当我尝试调用 API 时,我都会收到以下消息:

<Error>
  <Message>
    No HTTP resource was found that matches the request URI    
   'http://localhost:62834/api/PiDBTest'.
  </Message>
  <MessageDetail>
    No type was found that matches the controller named 'PiDBTest'.
  </MessageDetail>
</Error>

我尝试了几个不同的 url 来调用 API,但仍然无法使用它。 我一直在使用下面的 url 来调用 API

http://localhost:62834/api/PiDBTest

似乎不明白为什么我没有从通话中获得任何成功?

下面是 API 控制器和 RouteConfig 的代码

PiDBTest:

public class PiDBTest : ApiController
{
    private pidbEntities db = new pidbEntities();

    // GET: api/PiDBTest
    public IQueryable<PiData> GetPiDatas()
    {
        return db.PiDatas;
    }
}

路由配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        config.MapHttpAttributeRoutes();

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

【问题讨论】:

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


    【解决方案1】:

    启用属性路由后,这将起作用。

    [RoutePrefix("api/PiDBTest")]
    public class PiDBTest : ApiController
    {
        private pidbEntities db = new pidbEntities();
    
        // GET: api/PiDBTest
        [HttpGet]
        [Route("")]
        public IQueryable<PiData> GetPiDatas()
        {
            return db.PiDatas;
        }
    }
    

    【讨论】:

    • 这仍然会产生相同的错误。在阅读以前的答案后,我之前曾尝试过[HttpGet]。即使我在没有[RoutePrefix("api/PiDBTest")] 的情况下尝试它
    • 您确定路由正在注册。检查以确保在启动时调用WebApiConfig.Register
    • 我在包含config.Routes.MapHttpRoute(..... 的行中插入了一个断点,当我加载时它会命中它。
    【解决方案2】:

    请尝试如下更改您的 API 类,

        public class PiDBTestController : ApiController
        {
            private pidbEntities db = new pidbEntities();
    
            // GET: api/PiDBTest
            [HttpGet]
            [Route("")]
            public IQueryable<PiData> GetPiDatas()
            {
                return db.PiDatas;
            }
         } 
    

    【讨论】:

      【解决方案3】:

      您能否在您的方法之上添加 [HttpGet] public IQueryable GetPiDatas()

      【讨论】:

        【解决方案4】:

        在我的例子中,控制器类名中没有包含“Controller”这个词。我将类名从“Vendor”更改为“VendorController”,然后它开始工作了。

        【讨论】:

          猜你喜欢
          • 2019-11-26
          • 2015-09-08
          • 1970-01-01
          • 2018-09-02
          • 2016-01-26
          • 2020-03-05
          • 2017-12-23
          • 2016-07-13
          • 1970-01-01
          相关资源
          最近更新 更多