【发布时间】:2015-07-01 03:49:56
【问题描述】:
我遇到了文字段的 Web API 2 路由问题。
在一个项目中,我有 ASP.NET MVC 和 WebAPI2 一起运行,该项目也在运行 MVC 领域。
在每个区域下,都有一个包含 API 的 API 文件夹。尝试请求以下网址时遇到问题: {host}/accesscontrol/api/reporting/bookings。
- accesscontrol这里是区域名称
- 报告是控制者
- bookings 是文字段。
我得到的错误: 在控制器“报告”上找不到与请求匹配的操作。
这是应该接收此请求的控制器:
[RoutePrefix("accesscontrol/api/reporting")]
public class ReportingController : ApiController
{
[Route("bookings")]
[ResponseType(typeof(Booking))]
[HttpGet]
public async Task<IHttpActionResult> Bookings(string q = null)
{
//Code to get data
return Ok(bookings);
}
}
当我删除 [Route('Bookings')] 属性时,无论 Bookings 段是否存在,请求都能正常运行。
这是区域注册类下的路由配置:
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapHttpRoute(
"AccessControlApi_default",
"accesscontrol/api/{controller}/{id}",
new { id = RouteParameter.Optional }
);
context.MapRoute(
"AccessControl_default",
"accesscontrol/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
如何让应用理解区域下的那些文字片段?
编辑
我在 Global.asax.cs 文件中调用RegisterAllAreas,如下:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
【问题讨论】:
-
您可以尝试将“[Route("bookings")]”编辑为“[Route("bookings/{q?}")]”,看看是否有什么不同?
-
@valentin 我试过了,同样的错误结果!
标签: asp.net-mvc asp.net-web-api2 asp.net-mvc-areas asp.net-web-api-routing asp.net-mvc-5.2