2012-09-06 24 views
5

Sto riscontrando un problema che mi sta facendo impazzire.MVC 4 Aree API Web 404 Errore

Possiedo un'applicazione MVC 4 WebAPI con diverse aree definite.

mio Area Lavoro Invia un controllore (SendController.cs) è definita in questo modo:

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

mie offerte di lavoro nell'area di registrazione (JobsAreaRegistration.cs) è definita in questo modo:

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" } 
      ); 
     } 
    } 
} 

mio 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" } 
      ); 
     } 
    } 
} 

Quando eseguo il debugger percorso su di esso ottengo: My Route Debug http://imagestore2.boomerang.com/img/temp/routedebug.jpg

Ma quando cerco di inviare all'URL "Lavoro/Send" ottengo:

Il controller per il percorso '/ Lavoro/Invia' non è stato trovato o non implementa IController.

Ho provato così tante iterazioni e combinazioni che la mia testa gira. Qualche idea?

Grazie!

risposta

0

Ho avuto lo stesso problema, la soluzione era semplice: Ho dimenticato di aggiungere file e _ViewStart.cshtml_Layout.cshtml, e può aiutare a

1

Oltre a non sostenere Areas (perché MapHTTPRoute non ha il supporto dello spazio dei nomi), La Controller API deve utilizzare MapHttpRoute, non rottaMappa come in questo esempio (dopo la rimozione area):

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 l'assenza di {azione}, il metodo non azioni, put sono presi dalla richiesta HTTP: GET, HEAD , ecc ...

Problemi correlati