我正面临Web API 2路由的文字段问题。Web API 2路由失败的文字段
在一个项目中,我有ASP.NET MVC和WebAPI2一起运行,项目也运行MVC区域。
在每个区域下,都有包含API的API文件夹。我在尝试请求以下网址时遇到问题: {主机}/accesscontrol/api/reporting /预订。这里
- AccessControl的是区域名称
- 报告是控制器
- 预订是文字部分。
我得到的错误: 没有行动控制器“报告”与请求匹配上找到。
这是应该接收到这个请求,所述控制器:
[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')]
属性,所述请求,而不管工作良好如果预订段是有或没有。
这是在区注册类路由的配置:
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 }
);
}
我怎样才能让应用程序来了解下这些地区的文字段?
编辑
我打电话RegisterAllAreas
在的Global.asax.cs文件,如下图:
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);
}
}
你可以尝试编辑“[路线(”预订“)]”“[路线(”预订/ {q?}“)]”,看看是否有任何区别? – valentin
@valentin我试过了,同样的错误结果! –