【问题标题】:Web api route values is empty on action executes filterWeb api 路由值在操作执行过滤器时为空
【发布时间】:2017-07-12 18:25:35
【问题描述】:

我正在对我的控制器操作使用自定义操作过滤器。

我的控制器动作是这样的:

    [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 }
        );
    }
}

【问题讨论】:

  • 它不是路由数据,路由数据只能在 URL 中提供,而您的方法在 http 正文中提供了数据。
  • 如何访问Route属性参数的“监听器”?
  • @bookmarker 你想访问请求的 URI 吗?
  • 你可以访问它的属性,试试actionExecutedContext.ActionContext.ActionDescriptor.GetCustomAttributes<Route>()
  • 然后你就可以访问它的Template属性msdn.microsoft.com/en-us/library/…

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

请在您的 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链接将是那个。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多