在onactionexecution的Web API调用-如何映射到控制器/动作类从路由字符串读取动作属性
本文关键字:动作类 控制器 路由 字符串 属性 读取 映射 API Web onactionexecution 调用 | 更新日期: 2023-09-27 18:03:53
如何将传入路由字符串(例如Products/GetProduct)映射到将被调用的控制器/方法(ProductsController, GetProduct方法)?
我的目标是检查productscontroller的一个实例,以查找放置在GetProduct方法上的自定义属性。
一旦我知道我要处理的是哪个类/方法,我就知道如何检查这个类。
我曾经考虑过分割字符串,所以你最终会得到"产品"answers"GetProducts",然后我可以寻找一个ProductsController,并在其中,一个名为GetProducts的方法。
这可能有效,但似乎应该有一个更好的解决方案。什么好主意吗?
您可以使用以下命令获取实际的控制器实例和操作的属性:
public class Somefilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var controller = actionContext.ControllerContext.Controller;
var someFilterattributes = actionContext.ActionDescriptor.GetCustomAttributes<Somefilter>()
var otherAttributes = actionContext.ActionDescriptor.GetCustomAttributes<Other>()
}
}
其中Other是操作上的其他过滤器
您可以通过在 onactionexecution 方法
中使用以下代码来获取控制器名称var controller = actionContext.Request.GetRouteData().Values["controller"];
在Web API中获取控制器名称和操作:
Public Class MyClassActionFilter
Inherits ActionFilterAttribute
Public Overrides Sub OnActionExecuted(contexto As HttpActionExecutedContext)
contexto.Request.Properties.Item("MS_HttpRouteData").Values("controller")
contexto.Request.Properties.Item("MS_HttpRouteData").Values("action")
End Sub
Public Sub New
End Sub
End Class
在WebApiConfig.vb中添加一个全局过滤器,这样你就不需要在所有方法的头中添加标签
GlobalConfiguration.Configuration.Filters.Add(New MyClassActionFilter())