操作执行过滤器时,Web api路由值为空

时间:2017-07-08 11:58:29

标签: c# asp.net-mvc asp.net-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 }
        );
    }
}

1 个答案:

答案 0 :(得分:0)

请在 WebApiConfig.cs 文件中添加 / {action}

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 / Listener 链接就是那个。