来一篇关于NET的ASP.NET MVC自界说过滤属性完成log功能
可怜的程序员,还是逃不出移植的命运!如今的企业级开辟项目,出格是网站一样平常城市用到log功效,想一想年夜部分会用EnterpriseLoggingApplicationBlock的功效大概本人写一个组件,纪录体系日记事务,更好的跟踪懂得体系运转情形,现用ASP.NETMVC的过滤属性完成log功效!ASP.NETMVC的filter是一个属性,能够使用到controller后者action.当Controller大概actionmethod被挪用时,ASP.NETMVC的filter在挪用实行前后会被触发。先看下当Control内里的action被挪用时的使用承继,自界说类log的最终效果:
要完成下面的效果,现自界说一个类LogMessageAttribute,LogMessageAttribute承继接口IActionFilter,IResultFilter,也能够选择性的承继重写类FilterAttribute。
IActionFilterinterface界说为:
publicinterfaceIActionFilter
{
//Methods
voidOnActionExecuted(ActionExecutedContextfilterContext);
voidOnActionExecuting(ActionExecutingContextfilterContext);
}
OnActionExecuting:在Controller内里的actionmethod挪用之前运转
OnActionExecuted:在Controller内里的actionmethod挪用以后运转,可是在IResultFilter接口的OnResultExecuting办法实行之前
IResultFilterinterface界说为:
publicinterfaceIResultFilter
{
//Methods
voidOnResultExecuted(ResultExecutedContextfilterContext);
voidOnResultExecuting(ResultExecutingContextfilterContext);
}
OnResultExecuting:在Controller内里的actionmethod挪用处置玩前实行.
OnResultExecuted:在Controller内里的actionmethod挪用处置玩后实行.
接上去是重头戏:LogMessageAttribute自界说类
publicclassLogMessageAttribute:FilterAttribute,IActionFilter,IResultFilter
{
///<summary>
///<paramname="LogName">日记文件路径</para>
///</summary>
publicstringLogName{get;set;}
///<summary>
///纪录工夫,体系版本,以后线程ID等纪录
///</summary>
///<paramname="controller"></param>
///<paramname="action"></param>
///<paramname="message"></param>
publicvoidLogMessage(stringcontroller,stringaction,stringmessage)
{
if(!string.IsNullOrEmpty(LogName))
{
TextWriterwriter=newStreamWriter(LogName,true);
writer.WriteLine("#################Begin#################");
writer.WriteLine("Time:[{0}]",DateTime.Now.ToString("yyyy-MM-dd-hh:mm:ss"));
writer.WriteLine("Controller:{0}",controller);
writer.WriteLine("Action:{0}",action);
writer.WriteLine("Message:{0}",message);
writer.WriteLine("OperatingSystemversionis:{0}",System.Environment.OSVersion.Version.ToString());
writer.WriteLine("CurrentThreadIDis:{0}",AppDomain.GetCurrentThreadId());
writer.WriteLine("###############Over###############");
writer.Close();
}
}
publicvoidOnActionExecuting(ActionExecutingContextfilterContext)
{
LogMessage(filterContext.RouteData.Values["controller"].ToString(),
filterContext.RouteData.Values["action"].ToString(),
"Actionexeuting...");
}
publicvoidOnActionExecuted(ActionExecutedContextfilterContext)
{
LogMessage(filterContext.RouteData.Values["controller"].ToString(),
filterContext.RouteData.Values["action"].ToString(),
"Actionexecuted.");
}
publicvoidOnResultExecuting(ResultExecutingContextfilterContext)
{
LogMessage(filterContext.RouteData.Values["controller"].ToString(),
filterContext.RouteData.Values["action"].ToString(),
"Resultexecuting...");
}
publicvoidOnResultExecuted(ResultExecutedContextfilterContext)
{
LogMessage(filterContext.RouteData.Values["controller"].ToString(),
filterContext.RouteData.Values["action"].ToString(),
"Resultexecuted");
}
}
自界说好LogMessageAttribute类,使用到Controller大概action的属性。在Controller正在实行,大概出现一个View,一个HTTP哀求数据时,就会在日记文件纪录一些日记.
在项目标Controller内里使用自界说的属性
publicActionResultDesplayEmployee()
{
ViewData["Message"]="Ouremployeeswelcomeyoutooursite!";
List<Employee>employees=newList<Employee>
{
newEmployee{
FirstName="sky",
LastName="yang",
Email="weflytotti@163.com",
Department="Development"
},
newEmployee{
FirstName="sky",
LastName="yang",
Email="weflytotti@163.com",
Department="Development"
}
};
returnView(employees);
}
运转程序,正如文章入手下手所看到的截图!
总结:自界说ASP.NETMVC的过滤属性完成本人想要的功效只必要承继IActionFilter,IResultFilter。
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
页:
[1]