C# 记录每个网页上用户的所有请求
我想为传入服务器的所有请求建立一个“审计跟踪”,但是它需要针对每个用户、每个网页 例如,我想象这样的事情:C# 记录每个网页上用户的所有请求,c#,asp.net-mvc,C#,Asp.net Mvc,我想为传入服务器的所有请求建立一个“审计跟踪”,但是它需要针对每个用户、每个网页 例如,我想象这样的事情: 在初始视图呈现时,我会存储(cookie/页面变量/其他内容)一个唯一的Id,表示用户已浏览到/myapp.com/dashboard/1234。-也许在layout.cshtml中 然后,应用程序向服务器发出X个GET/POST请求,每个请求都具有最初绑定到呈现视图的相同唯一Id 这样,我就可以将一个页面的所有请求绑定起来,并将服务器的执行时间加起来 我尝试使用特定路径的cookies,
谢谢大家! 为此编写一个ActionFilter。这方面的例子很多
我个人更喜欢Mark Seemann的示例,因为它清楚地为属性和过滤器定义了一个很好的关注点分离。为此编写一个ActionFilter。这方面的例子很多
我个人更喜欢Mark Seemann的示例,因为它清楚地为属性和过滤器定义了一个很好的关注点分离。如果我理解正确,您只需加载一个页面,然后是对图像和其他资源的附加请求,或者是希望与初始页面加载绑定并跟踪的AJAX请求 这里的主要问题是,根据HTTP的工作方式,每个请求都作为自己的东西处理,而不是作为更大整体的一部分。web浏览器让一切看起来都天衣无缝,但web服务器所做的只是响应一堆(据它所知)不同事物的无关请求。要将它们作为一个单元进行跟踪,您需要将一些唯一的id附加到请求本身(对于GET,它将作为URI路径或查询字符串的一部分),或者依靠
Session
在请求之间引入状态。然而,只有当所有请求都可以绑定到单个初始请求时,会话状态才真正起作用。一旦用户开始同时处理多个不同的页面,就无法合理地辨别哪个请求属于哪个,而您又回到了同一条船上
换句话说,您唯一的实际选择是随请求一起发送,这意味着执行以下操作:
<link rel="stylesheet" type="text/css" href="/path/to/file.css?origin=@Request.RawUrl" />
然后,您可以有一个操作过滤器,它在任何请求的查询字符串中查找origin
,并将其绑定到该特定页面的日志记录
值得注意的是,默认情况下,IIS将直接处理所有静态资源请求,而不涉及ASP.NET。如果您确实希望跟踪对静态资源的请求,则必须通过ASP.NET将它们全部传递,这将是一种痛苦。如果您只想跟踪AJAX请求,那么就简单多了,并且在大多数情况下不需要任何特殊的东西
综上所述,如果这样做的唯一目的是跟踪页面加载时间,那么有更好、更简单的方法可以做到这一点。你可以安装一瞥。您可以使用浏览器的开发人员控制台。你可以使用谷歌分析之类的东西。对于页面加载统计,所有这些都比您在这里要走的路径要好得多。如果我理解正确,您有一个单独的页面加载,然后对图像和其他资源发出额外的请求,或者您希望与初始页面加载绑定并跟踪的AJAX请求 这里的主要问题是,根据HTTP的工作方式,每个请求都作为自己的东西处理,而不是作为更大整体的一部分。web浏览器让一切看起来都天衣无缝,但web服务器所做的只是响应一堆(据它所知)不同事物的无关请求。要将它们作为一个单元进行跟踪,您需要将一些唯一的id附加到请求本身(对于GET,它将作为URI路径或查询字符串的一部分),或者依靠
Session
在请求之间引入状态。然而,只有当所有请求都可以绑定到单个初始请求时,会话状态才真正起作用。一旦用户开始同时处理多个不同的页面,就无法合理地辨别哪个请求属于哪个,而您又回到了同一条船上
换句话说,您唯一的实际选择是随请求一起发送,这意味着执行以下操作:
<link rel="stylesheet" type="text/css" href="/path/to/file.css?origin=@Request.RawUrl" />
然后,您可以有一个操作过滤器,它在任何请求的查询字符串中查找origin
,并将其绑定到该特定页面的日志记录
值得注意的是,默认情况下,IIS将直接处理所有静态资源请求,而不涉及ASP.NET。如果您确实希望跟踪对静态资源的请求,则必须通过ASP.NET将它们全部传递,这将是一种痛苦。如果您只想跟踪AJAX请求,那么就简单多了,并且在大多数情况下不需要任何特殊的东西
综上所述,如果这样做的唯一目的是跟踪页面加载时间,那么有更好、更简单的方法可以做到这一点。你可以安装一瞥。您可以使用浏览器的开发人员控制台。你可以使用谷歌分析之类的东西。对于页面加载统计而言,所有这些都比您在这里选择的路径要好得多。I alr