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

时间:2018-11-21 19:03:51

标签: asp.net-core asp.net-core-2.1

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

我一直在研究URL中间件重写,以及试图找到一种方法,例如通过Startup类中的ConfigureServices之类的方法来访问HttpContext,但是我无法弄清楚这一点。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

编写中间件非常简单,只要从Microsoft Doc改写示例即可记录URL。

SELECT email, `date`,
GROUP_CONCAT(if(form_type = 'a', data1, NULL)) AS 'A1_a',
GROUP_CONCAT(if(form_type = 'a', data2, NULL)) AS 'A1_b',
GROUP_CONCAT(if(form_type = 'a', data3, NULL)) AS 'A2_a',
GROUP_CONCAT(if(form_type = 'a', data4, NULL)) AS 'A2_b', 
.
.
.
FROM mytable
GROUP BY email, `date`
ORDER BY `date` ASC

但是,我认为无法通过app.Use(async (context, next) => { var logger = new MyLogger(); var requestPath = context.Request.Path; logger.Log(requestPath); await next.Invoke(); }); 来区分是否在浏览器地址栏中输入了URL,而不是任何旧的GET请求。

答案 1 :(得分:2)

您可以检查引荐标题。 Asp.Net Core具有一个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

说我们的引荐网址就像:

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