0

I like to use a link in a view to point a ApiController in an Area. I've tried different kinds of registration. I've tried different overloads of RouteLink. No success. Independent how I register and how I try to get the Link, always ~/ is returned.

Registrations:

        var route1 = context.Routes.MapHttpRoute(
            "IpixDictionary_api1",
            "ipixdic/api/{controller}/{action}/{id}",
            new { id = RouteParameter.Optional },
            new[] { "WinGD.AppCenter.Areas.IpixDictionary.Controllers" });

        var route2 = context.Routes.MapHttpRoute(
            "IpixDictionary_api2",
            "ipixdic/api/{controller}/{action}/{id}",
            new { id = RouteParameter.Optional },
            new[] { "WinGD.AppCenter.Areas.IpixDictionary.Controllers" });
        if (route2.DataTokens == null)
        {
            route2.DataTokens = new RouteValueDictionary();
        }
        route2.DataTokens.Add("area", context.AreaName);

Used RouteLink overloads:

        @Html.RouteLink("Test11", "IpixDictionary_api1", new { httproute = true, controller = "EnginesApi" })
        @Html.RouteLink("Test12", "IpixDictionary_api1", new { httproute = true, controller = "EnginesApi" }, null)
        @Html.RouteLink("Test13", "IpixDictionary_api1", new { httproute = true, controller = "EnginesApi", area = "IpixDictionary" })
        @Html.RouteLink("Test14", "IpixDictionary_api1", new { httproute = true, controller = "EnginesApi", area = "IpixDictionary" }, null)
        <br />
        @Html.RouteLink("Test21", "IpixDictionary_api2", new { httproute = true, controller = "EnginesApi" })
        @Html.RouteLink("Test22", "IpixDictionary_api2", new { httproute = true, controller = "EnginesApi" }, null)
        @Html.RouteLink("Test23", "IpixDictionary_api2", new { httproute = true, controller = "EnginesApi", area = "IpixDictionary" })
        @Html.RouteLink("Test24", "IpixDictionary_api2", new { httproute = true, controller = "EnginesApi", area = "IpixDictionary" }, null)
        <br />

Everything works fine Without Areas, But it won't work with Areas.

Any ideas?

Amirhossein Mehrvarzi
  • 18,024
  • 7
  • 45
  • 70

1 Answers1

0

Found the solution. An API controller does not need an action in the registration :-)

So the following was my solution:

context.Route.MapHttpRoute(
            "IpixDictionary_api",
            "ipixdic/api/{controller}/{id}",
            new { id = RouteParameter.Optional });

@Html.RouteLink("json", "IpixDictionary_api", new { httproute = true, controller = "EnginesApi" })