gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 中有没有办法处理不同的 Response.StatusCode 值?

转载 作者:行者123 更新时间:2023-12-02 19:53:07 25 4
gpt4 key购买 nike

默认情况下,当用户未获得授权且 web.config 中的部分路由到 loginUrl 属性时,MVC Authorize 属性会设置 HttpContext.Response.StatusCode = 401。

我想对其他响应代码执行类似的操作。例如,我有一个名为 ActiveAccount 的属性,它验证用户的帐户当前是否处于事件状态,然后允许他们访问 Controller 。如果它们不活跃,我想将它们路由到特定的 Controller 并查看(以更新他们的帐户)。

我想复制处理此问题的授权属性方法,并将 StatusCode 设置为 410 之类的内容(警告:前面的数字凭空出现),并将用户路由到 web.config 文件中定义的位置.

我可以做什么来实现这种行为?或者有更简单的方法吗?

编辑:结果

我最终避免了 StatusCode,只是从属性内执行重定向,因为这要简单得多。简而言之,这是我的代码:

// using the IAuthorizationFilter allows us to use the base controller's 
// built attribute handling. We could have used result as well, but Auth seems
// more appropriate.
public class ActiveAccountAttribute: FilterAttribute, IAuthorizationFilter
{

#region IAuthorizationFilter Members

public void OnAuthorization(AuthorizationContext filterContext)
{

if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
return;

// ... code which determines if our customer account is Active

if (!user.Status.IsActive)
filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary(new {controller = "Account"}));
}

#endregion
}

最佳答案

您可以继承RedirectToRouteResult类并为状态代码添加构造函数参数。

public class StatusRedirectResult : RedirectToRouteResult

private string _status;

public StatusRedirectResult(string action, RouteValueDictionary routeValues, string statusCode)
{
_status = statusCode;
base.RedirectToRouteResult(action, routeValues);
}

public override ExecuteResult(ControllerContext context)
{
context.HttpContext.Current.Response.Status = _status;
base.ExecuteResult(context);
}
}

要在 Controller 操作中使用它,只需

return StatusRedirect("NewAction", new RouteValueDictionary(new { controller = "TheController" }, "410");

关于asp.net-mvc - ASP.NET MVC 中有没有办法处理不同的 Response.StatusCode 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1396204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com