2012-10-26 92 views
0

我有一个WebApi项目,我正在尝试向它添加一个区域。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。我是在做一些愚蠢的事情还是需要做一些额外的步骤?

回答

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,如果你有两个控制器具有相同的名称(不管它们是否在不同的领域),你会得到一个异常。

为了支持这种情况,您需要更改控制器的选择方式。你会发现一篇文章涵盖了如何做到这一点here