可以为ASP.NET MVC中的整个Controller
指定许多操作过滤器,从而将其应用于控制器中的所有操作。例如:
[Authorize]
public class MyController : Controller
{
// ....
}
表示[Authorize]
适用于控制器中的所有操作,非常方便。
但是当我尝试在控制器上放置[HttpGet]
,[HttpPost]
或[AcceptVerbs(...)]
时,编译器会抱怨该属性仅适用于方法(这是正确的,因为它们已定义[AttributeUsage]
仅指向方法。)
如果我想将控制器中的所有操作仅限制为POST动词怎么办?
我的问题是:
答案 0 :(得分:0)
HttpGet和HttpPost继承自ActionMethodSelectorAttribute类,并且仅适用于方法。我认为你需要创建自己的属性。
答案 1 :(得分:0)
解决此问题的自定义属性:
public sealed class AllowedMethodsAttribute : ActionFilterAttribute
{
private readonly string[] methods;
public AllowedMethodsAttribute(params string[] methods) => this.methods = methods.Select(r => r.Trim().ToUpperInvariant()).ToArray();
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
if (!methods.Contains(actionContext.HttpContext.Request.Method))
{
actionContext.Result = new StatusCodeResult(405);
}
}
}
用法:
[AllowedMethods("GET", "PATCH")]