3

I added one Api controller to my MVC project. And made following changes:

My WebApiConfig

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "GetFirms",
                routeTemplate: "api/B2bApi/GetFirms",
                defaults: new { controller =  "B2bApiController", action= "GetFirms" });
        }
    }

I register this route in Global.asax (Last line)

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

I checked in debugged and saw that my routes are registered. So here is my controller:

public class B2bApiController : ApiController
    {
        [HttpGet]
        public string GetFirms()
        {
            return "test";
        }
    }

When i navigate to

/api/B2bApi/GetFirms

i'm getting

404 error

.

What is the correct way to register api routes?

3 Answers 3

3

If asp.net-mvc-4

WebApiConfig.Register(GlobalConfiguration.Configuration);

if asp.net-mvc-5 and asp.net-web-api-2

GlobalConfiguration.Configure(WebApiConfig.Register); 

must be placed above

RouteConfig.RegisterRoutes(RouteTable.Routes);

Example:

protected void Application_Start()
{
     AreaRegistration.RegisterAllAreas();

     //GlobalConfiguration.Configure(WebApiConfig.Register); // use if mvc5       
     WebApiConfig.Register(GlobalConfiguration.Configuration); // use if mvc4
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);
     BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Sign up to request clarification or add additional context in comments.

Comments

1

I assume you are creating a separate project for WebApi.

If I am not wrong, you've not registered WebApiConfig in Global.asax.

Remove this

   RouteConfig.RegisterRoutes(RouteTable.Routes);

and add

WebApiConfig.Register(GlobalConfiguration.Configuration);

It looks like -

enter image description here

Comments

0

When specifying a controller for the defaults remove the keyword "controller" in your controllers name.

    config.Routes.MapHttpRoute(
        name: "GetFirms",
        routeTemplate: "api/B2bApi/GetFirms",
        defaults: new { controller = "B2bApi", action = "GetFirms" });

Also as others have said move your register to the top.

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.