我正在开发一个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,但是我无法弄清楚这一点。
任何帮助将不胜感激。
答案 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