5

私は気が狂うような問題を抱えています。

複数の領域が定義された MVC 4 WebAPI アプリケーションがあります。

私の仕事エリアの送信コントローラー (SendController.cs) は次のように定義されています。

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

My Jobs Area Registration (JobsAreaRegistration.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.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" }
            );
        }
    }
}

その上でルートデバッガーを実行すると、次のようになります:( ソース:boomerang.com私のルートのデバッグ

しかし、「Jobs/Send」という URL に投稿しようとすると、次のようになります。

パス '/Jobs/Send' のコントローラーが見つからないか、IController を実装していません。

頭が回転するほど多くの反復と組み合わせを試しました。何か案は?

ありがとう!

4

3 に答える 3

10

WebAPI は Areas を処理しないことがわかりました! 私の驚きを想像してみてください。それで、素晴らしい投稿http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/を見つけました。今、私は前進しています。

于 2012-09-07T00:50:10.950 に答える
1

エリアをサポートしないことに加えて (MapHTTPRoute は名前空間をサポートしていないため)、API コントローラーは、この例のように (エリアを削除した後) MapRoute ではなく、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 }
            );

    }

{action} がないことに注意してください。メソッドはアクションではなく、HTTP リクエストから取得されます: Get、Head など...

于 2013-01-07T17:20:45.010 に答える
0

_ViewStart.cshtml私は同じ問題を抱えていました。解決策は簡単でした。ファイルとを追加するのを忘れていました_Layout.cshtml

于 2012-11-18T15:51:41.440 に答える