在Controller中查找特定的HttpGet操作

时间:2013-01-28 16:55:19

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

考虑以下情况。在我的控制器中,我有:

public ActionResult Edit(int id)
{
  ...
}

[HttpPost]
public ActionResult Edit(Model model)
{
  ...
}

我还有一个ActionFilterAttribute,它适用于同一控制器的其他一些动作。在OnActionExecuting方法中,我需要获取ActionDescriptor HttpGet操作的Edit

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // as this is called from the same controller, I use
    ActionDescriptor action = filterContext.ActionDescriptor.ControllerDescriptor
             .FindAction(filterContext.Controller.ControllerContext, "Edit");
    ...
}

问题是,FindAction方法会在HttpPost请求的情况下向Edit POST操作返回“引用”。如何让它仅查看HttpGet个动作?

1 个答案:

答案 0 :(得分:1)

你可以使用may属性吗?

public class FooAttribute
    {


    }

[FooAttribute]
public ActionResult Edit(int id)
{
  ...
}

你可以查看OnActionExecution; 例子;

var isHasAttribute= filterContext.ActionDescriptor.IsDefined(typeof(FooAttribute), true);