【发布时间】: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