2012-09-06 22 views
5

私はナットを運転している問題があります。MVC 4 Web APIの領域404エラー

私はいくつかのエリアが定義されているMVC 4 WebAPIアプリケーションを持っています。

マイジョブエリアコントローラ(SendController.cs)はそうのように定義されて送信:

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

マイRouteConfig:

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

マイジョブエリア登録(JobsAreaRegistration.cs)はそうのように定義されています。 CSは言う:私はそれでルートデバッガを実行すると

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

は私が手: My Route Debug http://imagestore2.boomerang.com/img/temp/routedebug.jpg

は、しかし、私はURLに投稿しようとすると、「ジョブ/センド」私が取得:

パスするためのコントローラ「/ジョブ/送信」が見つかりませんでしたかIControllerを実装していません。

私は頭が回転しているので、多くの反復と組み合わせを試みました。何か案は?

ありがとうございます!

答えて

0

私は同じ問題を抱えていた、解決策は簡単だった:私は、ファイル_ViewStart.cshtml_Layout.cshtmlを追加するのを忘れ、そして地域をサポートしていないことに加えて、あなたに

1

を助けることができる(MapHTTPRouteは、名前空間のサポートを持っていないため)、

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

    } 

注{アクション}が存在しない場合、メソッドのアクションは、PUTはHTTPリクエストから取得されていません:GET、HEAD APIコントローラは、(エリアを削除した後)MapHttpRoute、この例のようにではないMapRouteを使用する必要があります。など...

関連する問題