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

我做了一个自定义访问权限检查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)

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

参考方案

重定向时不能传递复杂的对象参数。您可以传递其组成属性,并保留默认的模型绑定器来重建它。因此,假设您具有以下模型:

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。从语义上来说更正确。

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…

asp.net:treeview-显示文本框是否选中? - c#

我需要向用户显示字符串列表。用户可以选择多个字符串。如果选择了一组特定的字符串,则每个字符串旁边都会出现一个文本框。我想做的是向用户显示一个TREEVIEW,每个节点都是字符串之一。他们将通过选中复选框来选择所需的每个字符串。问题:如果用户选择特定的复选框,则我需要一个文本框来显示用户的GET输入。问题:如何从用户使用树形视图获取字符串输入? 参考方案 Tr…

MVC C#TempData - c#

有人可以解释一下MVC中TempData的目的。我了解它的行为类似于ViewBag,但除此之外它还有什么作用。 参考方案 TempData应该是一个短暂的实例,您应该 仅在当前和后续请求中使用它!以来 TempData以这种方式工作,您需要确定下一步 要求,并且重定向到另一个视图是您唯一的时间 可以保证这一点。因此,唯一使用TempData的方案 在重定向时…

asp.net oledbcommand返回所有行 - c#

我正在使用Oledbconnection连接到Microsoft Access数据库,并且正在使用OleDbCommand检索一些信息。我在数据库中有一个名为retrieveInfo的查询,该查询检索3行数据。字段中有一些重复项,但是应该是这样。我的数据如下所示: Name Email A [email protected] B [email protected] B C@gmai…

当浏览器在MVC中关闭时,阻止会话过期 - c#

我遇到会话问题在关闭浏览器后,我的会话将过期,并且在重新打开浏览器后,我必须再次登录。我不想使我的会话在浏览器关闭时过期。我在我的web.config文件中使用它: <authentication> <forms loginUrl="~/account/login" name="astroswamig"…