Agi*_*ble 16 asp.net asp.net-mvc action-filter
从ActionFilter中止/取消操作的最佳方法
我有这个ActionFilter,并且假设立即结束连接并返回401 Unauthroized:
public class SignInRequired : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// User is verified, continue executing action
if (Acme.Web.CurrentUser != null)
{
return;
}
// End response with 401 Unauthorized
var response = HttpContext.Current.Response;
response.StatusCode = (int)HttpStatusCode.Unauthorized;
response.End();
// Prevent the action from actually being executed
filterContext.Result = new EmptyResult();
}
}
Run Code Online (Sandbox Code Playgroud)
我学会了如何通过在这里设置'context.Result = new EmptyResult()`来取消执行操作,但我不确定这是否是刷新响应和关闭连接的最佳方法.
Ode*_*nmi 18
设置响应意味着不会调用操作.
public override void OnActionExecuting(HttpActionContext actionContext)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
Run Code Online (Sandbox Code Playgroud)
正如其他答案所述,但应使用AuthorizeAttribute(Docs for Web.API或MVC)进行身份验证.
Naf*_*lam 15
在 .net core 2.2、3.0 和 3.1 以及 .net 5 上,下面的示例工作正常
public override void OnActionExecuting(ActionExecutingContext context)
{
context.Result = new UnauthorizedObjectResult("user is unauthorized");
}
Run Code Online (Sandbox Code Playgroud)
@OdeyinkaOlubunmi适用于Web API或专门针对Web API,System.Web.Http.Filters.ActionFilterAttribute但不能用于的答案System.Web.Mvc.ActionFilterAttribute。AuthorizeAttribute重写AuthorizeCore是一个很好的方法,但是如果将@Vadim的示例用于GlobalFilter,则在标准配置中将出现以下错误:
HTTP错误404.15-找不到请求过滤模块配置为在查询字符串过长的情况下拒绝请求。
这是因为默认值/Login?ReturnUrl=将继续添加新值,直到查询字符串导致异常。
我为MVC解决它的方式是这样的:
public class DebugActionFilter : System.Web.Mvc.ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext actionContext)
{
actionContext.Result = new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
您可能希望将其设为 AuthorizeAttribute。这将自动将结果设置为 UnAuthorizedResult,而且它的优点是在任何其他过滤器之前运行。或者,您可以将结果设置为新的HttpUnauthorizedResult
public class SignInRequiredAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return !Acme.Web.CurrentUser != null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19238 次 |
| 最近记录: |