![](/img/trans.png)
[英]How to prevent action execution in OnActionExecuting of class that is inhereted from the Controller
[英]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.