2017-07-08 92 views
0

我对控制器操作使用自定义操作过滤器。Web api路由值在操作执行时为空过滤器

我控制器操作是这样的:

[HttpPost] 
    [Route("listener")] 
    [MyAttr]  
    public IHttpActionResult Listener([FromBody]Parameters request) 
    { 
     return Ok(); 
    } 

我想从动作过滤器访问Route("listener")值。

public class MyAttr: ActionFilterAttribute 
{   
    public async override Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) 
    { 
     var route = actionExecutedContext.ActionContext.RequestContext.RouteData;  
    } 
} 

但RouteData值集合没有项目。如何访问路由值?

我的配置是这样的:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 
+0

它没有路由数据,路由数据只能在URL中提供,而你的方法有在http主体中提供的数据。 – Igor

+0

如何访问Route属性参数的“侦听器”? – barteloma

+0

@bookmarker 您是否想要访问请求即将到来的URI? –

回答

0

请您WebApiConfig.cs添加/{}行动文件。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

API/ControllerName /监听链接意愿是。