I have visual studio 2012 installed with mvc4 using .net framework 4.5. Now I want to use webapi2 with attribute writing and i want my hlep page show all the endpoints properly.
In my solution i added a new mvc4 base emtpy project and using nuget i upgraded to mvc5 and then i have installed webapi2 packages. lastly i have installed help package for webapi2.
now when i use routeprefix I cant see any content on help page and when i try to access my webapi endpoint in browsers it throws following error.
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://expressiis.com/api/v1/'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'v1'.
</MessageDetail>
</Error>
namespace WebApi.Controllers
{
[RoutePrefix("api/v1")]
public class SubscribersController : ApiController
{
// GET api/<controller>
[Route("")]
[HttpGet]
public IQueryable<string> Get()
{
return new string[] { "value1", "value2" }.AsQueryable();
}
}
}
Based on your information, it looks like you are not calling the
httpConfig.MapHttpAttributeRoutes()
(Make sure to call this before any traditional routing registrations)Since you haven't called MapHttpAttributeRoutes, your request seems to be matching a traditional route, for example, like
api/{controller}
. This will not work because routes matching traditional routes will never see controllers/actions decorated with attribute routes.This question already has a selected answer. But I had a different solution for myself and think it would be helpful to reply if the selected answer doesn't help.
For me it was a silly mistake. I had two controllers but only one was working. The solutions was that my controller class was named improperly!
My working controller-
My non-working controller-
Be sure your controller class ends in
Controller
. The trailings
got me!In my case following line was creating problem, just commented it and everything start working
Comment it in WebApiConfig.cs file
A problem I ran into was related to the ordering in Application_Start(). Note the order of Web API configuraton below:
This does NOT work
This does work
This was not your case (as is apparent from your sample code), but please do remember to end the Controller class name with
Controller
.Else it won't be picked up by
config.MapHttpAttributeRoutes();
.I had this problem too and after a long search I realized that I was using
System.Web.Mvc.RouteAttribute
instead ofSystem.Web.Http.RouteAttribute
After correcting this and usingconfig.MapHttpAttributeRoutes() everything worked fine.