Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 记录每个网页上用户的所有请求_C#_Asp.net Mvc - Fatal编程技术网

C# 记录每个网页上用户的所有请求

C# 记录每个网页上用户的所有请求,c#,asp.net-mvc,C#,Asp.net Mvc,我想为传入服务器的所有请求建立一个“审计跟踪”,但是它需要针对每个用户、每个网页 例如,我想象这样的事情: 在初始视图呈现时,我会存储(cookie/页面变量/其他内容)一个唯一的Id,表示用户已浏览到/myapp.com/dashboard/1234。-也许在layout.cshtml中 然后,应用程序向服务器发出X个GET/POST请求,每个请求都具有最初绑定到呈现视图的相同唯一Id 这样,我就可以将一个页面的所有请求绑定起来,并将服务器的执行时间加起来 我尝试使用特定路径的cookies,

我想为传入服务器的所有请求建立一个“审计跟踪”,但是它需要针对每个用户、每个网页

例如,我想象这样的事情:

  • 在初始视图呈现时,我会存储(cookie/页面变量/其他内容)一个唯一的Id,表示用户已浏览到/myapp.com/dashboard/1234。-也许在layout.cshtml中

  • 然后,应用程序向服务器发出X个GET/POST请求,每个请求都具有最初绑定到呈现视图的相同唯一Id

  • 这样,我就可以将一个页面的所有请求绑定起来,并将服务器的执行时间加起来

    我尝试使用特定路径的cookies,但我意识到这不起作用,因为用户可以使用相同的url打开多个选项卡。用户还可以同时在应用程序的多个区域工作。他们可以打开1到10个以上的选项卡。每一个都应该有自己的唯一Id和该页面上发生的所有调用的“审计跟踪”

    这是一个现有的应用程序,因此修改每个GET/POST以传入唯一Id超出范围。只是希望我错过了一些可以解决这个问题的东西


    谢谢大家!

    为此编写一个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