WebApi未找到区域

时间:2012-10-26 20:20:39

标签: c#-4.0 asp.net-mvc-4 asp.net-web-api

我有一个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的额外步骤?

1 个答案:

答案 0 :(得分:5)

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

为此,请使用MapHttpRoute扩展方法(您需要为System.Web.Http添加using语句。)

    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区域,如果您有两个具有相同名称的控制器(无论它们是否位于不同区域),您将获得异常。

要支持此方案,您需要更改控制器的选择方式。您会找到一篇文章介绍如何执行此操作here