ASP.NET Web API中没有区域的多级路由

ehd*_*hdv 4 asp.net-mvc asp.net-mvc-routing asp.net-web-api

我正在尝试使用新的ASP.NET Web API执行以下操作:

/api/business/{id}获取业务目录信息的GET .对同一URL的PUT更新信息等.该部分工作正常.当我想要添加以前曾经是一个动作的内容时,我遇到的问题就是查看该业务的评论.理想情况下,我希望在/api/business/{id}/reviewsGET返回评论,POST提交新评论等等时可以访问.

在普通的ASP.NET MVC应用程序中,我可以定义两个操作方法(Review和PostReview),然后使用属性来更改操作名称并接受第二个函数的HTTP方法.我希望有一些方法可以在新系统中使用类,但我无法弄清楚它是什么,我在文档中没有看到任何关于这个问题的内容.

使用领域也没有工作,尽我可以告诉:我需要的/business/{id}URL的工作,并打破区域.

Mik*_*son 13

Web API确实支持按行为进行路由,因此您可以执行以下操作:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{id}/{action}",
    defaults: new { action = "DirectoryInfo", id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

控制器方法:

[HttpGet]
[ActionName("DirectoryInfo")]
public void GetDirectoryInfo(int id)

[HttpPut]
[ActionName("DirectoryInfo")]
public void PutDirectoryInfp(int id)

[HttpGet]
public void Review(int id)

[HttpPost]
[ActionName("Review")]
public void PostReview(int id)
Run Code Online (Sandbox Code Playgroud)

另一种选择是创建两个控制器,BusinessController和ReviewController,并创建以下路由:

routes.MapHttpRoute(
    name: "BusinessRoute", 
    routeTemplate: "api/business/{id}", 
    defaults: new { controller = "Business", id = RouteParameter.Optional }
    );
routes.MapHttpRoute(
    name: "reviewsRoute", 
    routeTemplate: "api/contacts/{id}/reviews/", 
    defaults: new { controller = "Reviews", id = RouteParameter.Optional}
    );
Run Code Online (Sandbox Code Playgroud)

然后使用Web API样式的隐式动作名称.