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

您的代码为 Area 注册了 MVC 路由,而不是 Web API 路由。

为此,请使用MapHttpRoute扩展方法(您需要添加 using 语句 for 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,如果您有两个具有相同名称的控制器(无论它们是否位于不同的区域),您将获得异常。

要支持这种情况,您需要更改选择控制器的方式。您将在此处找到一篇介绍如何执行此操作的文章。

于 2012-10-29T21:04:23.053 回答