2012-09-06 24 views
5

Tengo un problema que me está volviendo loco.MVC 4 Web API Areas Error 404

Tengo una aplicación MVC 4 WebAPI que tiene varias áreas definidas.

Mis trabajos Área Enviar controlador (SendController.cs) se define así:

namespace TargetAPI.Areas.Jobs.Controllers 
{ 
    public class SendController : ApiController 
    { 
     [HttpPost] 
     public HttpResponseMessage Index(SendRequest req) 
     { 
      try 
      { 
      //blah blah 
      } 
      catch (Exception ex) 
      { 
      //blah blah 
      } 
     } 
    } 
} 

Mis trabajos Área de Registro (JobsAreaRegistration.cs) se define así:

namespace TargetAPI.Areas.Jobs 
{ 
    public class JobsAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Jobs"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Jobs_long", 
       "Jobs/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional }, 
       new[] { "TargetAPI.Areas.Jobs.Controllers" } 
      ); 
     } 
    } 
} 

Mi RouteConfig. cs dice:

namespace TargetAPI 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", 
        action = "Index", id= UrlParameter.Optional }, 
       namespaces: new string[] { "TargetAPI.Controllers" } 
      ); 
     } 
    } 
} 

Cuando ejecuto el depurador ruta en que me sale: My Route Debug http://imagestore2.boomerang.com/img/temp/routedebug.jpg

Pero cuando intento publicar en la URL "Empleo/Enviar" I Get:

El controlador de ruta '/ Empleo/Enviar' no se ha encontrado o no implementa IController.

He intentado tantas iteraciones y combinaciones que mi cabeza está girando. ¿Algunas ideas?

Gracias!

Respuesta

0

he tenido el mismo problema, la solución era simple: se me olvidó añadir archivos _ViewStart.cshtml y _Layout.cshtml, y puede ayudarle a

1

Además de no soporte a las zonas (porque MapHTTPRoute no tiene soporte de espacio de nombres), El controlador de API debe utilizar MapHttpRoute, no MapRoute como en este ejemplo (después de la eliminación de área):

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

    } 

nota la ausencia de {acción}, del método no son acciones, puesto se toman de la petición HTTP: GET, HEAD , etc ...

Cuestiones relacionadas