Web api route values is empty on action executes filter

旧巷老猫 提交于 2019-12-25 12:53:07

问题


I am using a custom action filter on my controller action.

My controller action is like this:

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

I want to access Route("listener") values from action filter.

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

But RouteData values collection has no items. How can access route value?

My configuration is like this:

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:


Please add /{action} in your WebApiConfig.cs file.

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 the link will to be that.



来源:https://stackoverflow.com/questions/44986001/web-api-route-values-is-empty-on-action-executes-filter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!