0

WebApi プロジェクトがあり、それに領域を追加しようとしています。

新しい領域を webapi プロジェクトと mvc4 アプリケーションに追加するときに、何か別のことを行う必要がありますか?

次のような単純なエリア登録があります

 public class MobileAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Mobile";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Mobile_default",
            "Mobile/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }

        );
    }
}

みたいなコントローラー

  public class BusinessDetailsController : BaseController
{
    public string Index()
    {
        return "hello world";
    }
    public HttpResponseMessage Get()
    {
        var data = new List<string> {"Store 1", "Store 2", "Store 3"};
        return Request.CreateResponse(HttpStatusCode.OK, data);
    }
}

しかし、私は決してAPIに到達できません。私は愚かなことをしていますか、それとも実行する必要がある webapi の追加のステップがありますか?

4

1 に答える 1

5

コードは、Web API ルートではなく、エリアの MVC ルートを登録します。

これを行うには、MapHttpRoute拡張メソッドを使用します ( の using ステートメントを追加する必要がありますSystem.Web.Http)。

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.MapHttpRoute(
            name: "AdminApi",
            routeTemplate: "admin/api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }

ただし、ASP.NET Web API ではエリアは OOTB で実際にサポートされていないため、同じ名前のコントローラーが 2 つある場合 (異なるエリアにあるかどうかに関係なく)、例外が発生します。

このシナリオをサポートするには、コントローラーの選択方法を変更する必要があります。これを行う方法について説明した記事は、こちらにあります。

于 2012-10-29T21:04:23.053 に答える