繁体   English   中英

在进行Web API的OnActionExecuting调用期间-如何从路由字符串映射到控制器/操作类以读取操作属性

[英]During OnActionExecuting for Web API call - How to map to controller/action class from route string to read action attributes

如何将传入的路由字符串(例如Products / GetProduct)映射到将被调用的Controller / Method(ProductsController,GetProduct方法)?

我的目标是检查ProductsContoller的实例,以找到放置在GetProduct方法上的自定义属性。

一旦知道要处理的是哪种班级/方法,我就知道如何检查班级。

我曾考虑过只拆分字符串,所以最终得到的是“ Products”和“ 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>()
        }
    }

其他是对操作的其他过滤器。

您可以通过在OnActionExecuting方法中使用以下代码来获取控制器名称

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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM