MVC拦截器传参问题 1、 在项目中提到需要添加日志时,我第一印象是使用日志拦截器即: LoggerFilter:ActionFilter,IActionFilter. 2、 但是我需要向日志拦截器传参,这个时候我想传入动态的参数该如何做呢? 比如获取当前登录用户用户名、登录用户IP地址等等。 使用属性的方式只能传入一些静态值,如何动态传值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对的,在HttpContent中,但是使用属性的方式无法动态赋值的,在Action里当然可以。[LoggerFilter()]public ActionResult Index(){ } public class LoggerFilter : FilterAttribute,IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.Controller.ViewData["ExecutedLogger"] = "公告添加完成,已以写入日志!时间:" + DateTime.Now; if (filterContext.HttpContext.Session["ViewCount"] == null) { filterContext.HttpContext.Session["ViewCount"] = 0; } int viewCount = Convert.ToInt32(filterContext.HttpContext.Session["ViewCount"]); viewCount++; filterContext.HttpContext.Session["ViewCount"] = viewCount; } public void OnActionExecuting(ActionExecutingContext filterContext) { var obj = filterContext; filterContext.Controller.ViewData["ExecutingLogger"] = "正要添加公告,已以写入日志!时间:" + DateTime.Now; } }你想要的都可以从filterContext.HttpContext这个里面取如filterContext.HttpContext.Session["User"] 那您意思就是使用Session传值,如果是使用Session传值的话, 那么一个Action里传上5个值,而且键还不能相同,相同就会后者覆盖前者。那么5个Action就是25个Session。 我晕了~当前登录用户用户名、登录用户IP地址这些都在HttpContent里面,客户端每次请求都会提交就如同你把Cookie写到客户端后,以后每次客户端提交请求,都会连同Cookie一起提交。因此你用不用 他都摆在那里为什么5个Action就是25个Session呢?只有25个来自不同客户端的请求 才会产生25个Session而且我给的例子是用Session,因为我在学 过滤器 的时候 这样方便实现我需要的效果如果你把当前的登录用户名写到Cookie中 就用Cookie啊,也是从HttpContent获取到的感觉你的基础.....看看http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html还有他的细说 Form (表单)细说 Cookie还有他的很多文章都很值得看,他写的很用心~ webbrower做的浏览器,加载出来的页面的关闭按钮怎么添加? C# 如何读取以下配置文件的信息 c#如何关闭一个运行的程序? 如何C# 初始化字符串型 二维数组 请问如何实现远程控制客户端的windows services的开启和关闭呢 关于从数据库取图片二进制图片在网页上总是要刷新几次才出来怎么回事 线程和进程的问题 高分请教一.net问题 软件开发者工作一年后的困惑,求意见建议啊 给treeview增加右键菜单 图片按钮做成如下图片效果 C# 操作word的com组件版本问题
对的,在HttpContent中,但是使用属性的方式无法动态赋值的,在Action里当然可以。[LoggerFilter()]
public ActionResult Index()
{
}
{
public void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Controller.ViewData["ExecutedLogger"] = "公告添加完成,已以写入日志!时间:" + DateTime.Now;
if (filterContext.HttpContext.Session["ViewCount"] == null)
{
filterContext.HttpContext.Session["ViewCount"] = 0;
}
int viewCount = Convert.ToInt32(filterContext.HttpContext.Session["ViewCount"]);
viewCount++;
filterContext.HttpContext.Session["ViewCount"] = viewCount;
} public void OnActionExecuting(ActionExecutingContext filterContext)
{
var obj = filterContext;
filterContext.Controller.ViewData["ExecutingLogger"] = "正要添加公告,已以写入日志!时间:" + DateTime.Now;
}
}你想要的都可以从filterContext.HttpContext这个里面取
如
filterContext.HttpContext.Session["User"]
那您意思就是使用Session传值,如果是使用Session传值的话, 那么一个Action里传上5个值,而且键还不能相同,相同就会后者覆盖前者。那么5个Action就是25个Session。
当前登录用户用户名、登录用户IP地址
这些都在HttpContent里面,客户端每次请求都会提交
就如同你把Cookie写到客户端后,以后每次客户端提交请求,都会连同Cookie一起提交。
因此你用不用 他都摆在那里为什么5个Action就是25个Session呢?
只有25个来自不同客户端的请求 才会产生25个Session而且我给的例子是用Session,因为我在学 过滤器 的时候 这样方便实现我需要的效果
如果你把当前的登录用户名写到Cookie中 就用Cookie啊,也是从HttpContent获取到的感觉你的基础.....
看看
http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html
还有他的
细说 Form (表单)
细说 Cookie还有他的很多文章都很值得看,他写的很用心~