WebAPI未找到HTTP资源

时间:2016-12-03 16:56:11

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

所以我已经设置了一个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>

我尝试了几个不同的网址来调用API,但仍无法随意使用它。 我一直在使用以下网址来调用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;
    }
}

RouteConfig:

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 }
        );
    }
}

4 个答案:

答案 0 :(得分:2)

启用属性路由后,这将有效。

[RoutePrefix("api/PiDBTest")]
public class PiDBTest : ApiController
{
    private pidbEntities db = new pidbEntities();

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

你可以在你的方法之上添加[HttpGet]吗?     public IQueryable GetPiDatas()

答案 3 :(得分:0)

在我的情况下,控制器类名称中未包含单词“ Controller”。我将类名称从“ Vendor”更改为“ VendorController”,然后它开始工作。