代码之家  ›  专栏  ›  技术社区  ›  Los Morales

获取用ASP.NET核心在浏览器中输入的显式URL

  •  0
  • Los Morales  · 技术社区  · 7 年前

    我正在开发一个ASP.NET Core 2.1应用程序,该应用程序在客户机上使用ReactJS,并希望记录在浏览器中显式输入的URL以进行跟踪。例如,我想知道用户何时明确输入: http://myapp.com/ ; http://myapp.com/contact ; http://myapp.com/help 等在浏览器中。我可以跟踪用户在登录后单击各种链接的时间。 http://myapp.com 使用javascript,但是当用户直接在浏览器中输入它(或者点击谷歌搜索的链接)时,我目前无法跟踪。

    我一直在研究URL中间件的重写,并试图找到一种从类似于启动类中的configureServices的东西访问httpContext的方法,但我无法解决这个问题。

    任何帮助都将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Adam Vincent    7 年前

    编写中间件是相当直接的,从 Microsoft Doc 将记录URL。

    app.Use(async (context, next) =>
    {
        var logger = new MyLogger();
        var requestPath = context.Request.Path;
        logger.Log(requestPath);
        await next.Invoke();
    });
    

    但是,我认为不可能从 HttpContext 是否在浏览器地址栏中输入了URL,而不是任何旧的GET请求。

        2
  •  2
  •   Tarik Tutuncu    7 年前

    您可以检查引用头。NET核心有一个HTTP扩展库,它有一个扩展方法来获取类型化的头。

    添加:

    using Microsoft.AspNetCore.Http.Extensions;
    

    然后使用httpContext上的gettypedheaders()扩展访问referer,这些是一些属性:

    httpContext.Request.GetTypedHeaders().Referer.AbsolutePath
    httpContext.Request.GetTypedHeaders().Referer.AbsoluteUri
    httpContext.Request.GetTypedHeaders().Referer.Authority
    httpContext.Request.GetTypedHeaders().Referer.Host
    httpContext.Request.GetTypedHeaders().Referer.PathAndQuery
    

    假设我们的引用URL如下:

    http://localhost:4200/profile/users/1?x=1
    

    上述属性将具有以下值:

    /profile/users/1
    http://localhost:4200/profile/users/1?x=1
    localhost:4200
    localhost
    /profile/users/1?x=1
    
    推荐文章