2017-07-08 33 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 /監聽鏈接意願是。