Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core 获取使用asp.net核心在浏览器中输入的显式url_Asp.net Core_Asp.net Core 2.1 - Fatal编程技术网

Asp.net core 获取使用asp.net核心在浏览器中输入的显式url

Asp.net core 获取使用asp.net核心在浏览器中输入的显式url,asp.net-core,asp.net-core-2.1,Asp.net Core,Asp.net Core 2.1,我正在开发一个ASP.NET Core 2.1应用程序,该应用程序在客户端上使用ReactJS,并希望记录在浏览器中显式输入的URL,以便进行跟踪。例如,我想知道用户何时显式输入:;等在浏览器中。一旦用户已经在使用Javascript,我就能够跟踪用户何时单击各种链接,但当用户直接在浏览器中输入链接(或单击谷歌搜索中的链接)时,我目前无法跟踪 我一直在研究url中间件重写,并试图找到一种从Startup类中的ConfigureServices之类的东西访问HttpContext的方法,但我无法理

我正在开发一个ASP.NET Core 2.1应用程序,该应用程序在客户端上使用ReactJS,并希望记录在浏览器中显式输入的URL,以便进行跟踪。例如,我想知道用户何时显式输入:;等在浏览器中。一旦用户已经在使用Javascript,我就能够跟踪用户何时单击各种链接,但当用户直接在浏览器中输入链接(或单击谷歌搜索中的链接)时,我目前无法跟踪

我一直在研究url中间件重写,并试图找到一种从Startup类中的ConfigureServices之类的东西访问HttpContext的方法,但我无法理解这一点


如果有任何帮助,我们将不胜感激。

编写中间件相当简单,稍微修改一下示例将记录URL

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

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

编写中间件相当简单,稍微修改示例将记录URL

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

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

您可以检查Referer头。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

您可以检查Referer标题。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

尝试使用
IHttpContextAccessor
:例如
httpContextAccessor.HttpContext.Request.Host.Value
;via:
services.AddSingleton()尝试使用
IHttpContextAccessor
:例如
httpContextAccessor.HttpContext.Request.Host.Value
;via:
services.AddSingleton()就像你提到的,它会抓取并记录每个请求。需要找到一种方法来输入浏览器url,或者至少过滤掉它。就像你提到的,这会捕获并记录每个请求。将需要找到一种方法来输入浏览器url,或者至少过滤掉它。