Question

I'm trying to configure web api area to allow me to pass an optional format extension. Here is my RegisterArea method's code:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.Routes.MapHttpRoute(
        name: "Api_default",
        routeTemplate: @"Api/{controller}/{action}/{id}.{ext}",
        defaults: new
            {
                action = "Index",
                id = RouteParameter.Optional,
                formatter = RouteParameter.Optional
            },
        constraints: new
                            {
                                id = @"[0-9]+",
                                controller = @"[^\.]+",
                                ext = @"json|xml"
                            }
    );

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
            new UriPathExtensionMapping("json", "application/json")
        );

    GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
            new UriPathExtensionMapping("xml", "application/xml")
        );

}

Now, if I go to http://www.example.com/api/countries it works fine, but when I try http://www.example.com/api/countries.json gives me

No type was found that matches the controller named 'countries.json'.

What am I doing wrong?

Was it helpful?

Solution

Found the issue! The code above is correct. But, I'm using AttributeRouting, which added a AttributeRoutingHttpConfig.cs to my App_Start folder and was messing things up. So, if you run into this issue, check that!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top