可以在Controller MVC中为整个ASP.NET指定许多动作过滤器,从而将其应用于控制器中的所有操作。例如:
[Authorize]
public class MyController : Controller
{
// ....
}这意味着[Authorize]应用于控制器中的所有操作,这非常方便。
但是,当我试图将[HttpGet]、[HttpPost]或[AcceptVerbs(...)]放在控制器上时,编译器会抱怨该属性只能用于方法(这是正确的,因为它们定义时[AttributeUsage]只指向方法)。
如果我想将控制器中的所有操作限制为仅发布谓词,该怎么办?
我的问题是:
发布于 2014-06-05 17:36:58
HttpGet和HttpPost继承自ActionMethodSelectorAttribute类,仅适用于方法。我认为你需要创建你自己的属性。
发布于 2020-12-08 20:06:33
用于解决此问题的自定义属性:
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")]https://stackoverflow.com/questions/24066296
复制相似问题