gpt4 book ai didi

c# - ActionFilterAttribute 重定向到带参数的操作方法

转载 作者:行者123 更新时间:2023-12-02 14:46:14 26 4
gpt4 key购买 nike

我做了一个自定义访问检查 ActionFilterAttribute,如果他们没有足够的访问权限,我想将其重定向到错误页面。这是我到目前为止所拥有的。

RouteValueDictionary routeValues = new RouteValueDictionary(new {
action = "Error",
controller = "Home",
error = new Error(HttpStatusCode.Unauthorized, "You do not have sufficient access to complete your request.", (HttpContext.Current != null ? HttpContext.Current.Request.UserHostAddress : ""), DateTime.Now)
});
filterContext.Result = new RedirectToRouteResult(routeValues);

这里是错误页面的操作方法

public ActionResult Error(Error error)

但是,当路由重定向到操作方法时,“错误”参数为空,如何在参数不为空的情况下执行此操作?

最佳答案

重定向时不能传递复杂的对象参数。您可以传递它的组成属性并让默认模型绑定(bind)器完成重建它的工作。假设您有以下模型:

public class Error
{
public string Message { get; set; }
public HttpStatusCode Status { get; set; }
public string UserHost { get; set; }
public DateTime Date { get; set; }
}

你可以像这样重定向:

var routeValues = new RouteValueDictionary(new 
{
action = "Error",
controller = "Home",

Message = "You do not have sufficient access to complete your request.",
Status = HttpStatusCode.Unauthorized,

// Remark: never use HttpContext.Current :
UserHost = filterContext.HttpContext.Request.UserHostAddress,

Date = DateTime.Now.ToString("u")
});
filterContext.Result = new RedirectToRouteResult(routeValues);

另外,为了处理授权,我建议您编写自定义 AuthorizeAttribute 而不是自定义 ActionFilterAttribute。它在语义上更正确。

关于c# - ActionFilterAttribute 重定向到带参数的操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289619/

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