1

我正面临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); 
    } 
} 
+0

你可以尝试编辑“[路线(”预订“)]”“[路线(”预订/ {q?}“)]”,看看是否有任何区别? – valentin

+0

@valentin我试过了,同样的错误结果! –

回答

0

我通过移动解决我的问题。

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     AreaRegistration.RegisterAllAreas(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] {"WebPortal.Controllers"} 
     ); 
    } 
} 
0

我设法使其工作在你的MapHttpRoute控制器后,只需添加行为和将[Route(“bookings”)]属性更改为[ActionName(“bookings”)],一切正常。

context.Routes.MapMvcAttributeRoutes(); 

    context.Routes.MapHttpRoute(
     "AccessControlApi_default", 
     "Accesscontrol/api/{controller}/{action}/{id}", 
     new { id = RouteParameter.Optional}); 

我希望这会帮助你。 AreaRegistration.RegisterAllAreas();的global.asax.cs文件RouteConfig.cs文件:

+0

我读过它,它完全适用。我不知道问题在哪里。 –

+0

尝试在你的RegisterArea上添加这个'context.Routes.MapMvcAttributeRoutes();'这将启用属性路由。 – jtabuloc

+0

我做过了,我在所有其他映射代码之前添加了它,但具有相同的错误结果! –