asp.net-core - 如何从 Identity Server 4 端点获取路由数据
问题描述
我有一个 ResponseTimeMiddleware.cs 负责获取每个请求的响应时间指标(我正在使用 datadog)。由控制器和操作名称标记。然而,当我们点击“connect/token”端点时,context.GetRouteData() 为空,可能是因为身份服务器在幕后执行此操作。有没有一种方法可以获得这些信息或其他一些我可以标记的独特信息?
这是我的代码:
public class ResponseTimeMiddleware
{
// other code..
public Task InvokeAsync(HttpContext context)
{
var request = context.Request;
var watch = new System.Diagnostics.Stopwatch();
watch.Start();
context.Response.OnStarting(() =>
{
watch.Stop();
var routeData = context.GetRouteData();
var responseTime = watch.ElapsedMilliseconds.ToString();
var tags = new[] { $"statusCode:{context.Response.StatusCode.ToString()}", $"controller:{routeData.Values["controller"]}", $"action:{routeData.Values["action"]}" };
context.Response.Headers[ResponseHeaderResponseTime] = responseTime;
DogStatsd.Timer("response.time", responseTime, tags: tags);
return Task.CompletedTask;
});
return nextDelegate(context);
}
}
这是我的启动:
public class Startup
{
// other code..
public static void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseMiddleware<ResponseTimeMiddleware>();
app.UseMvcWithDefaultRoute();
app.UseStaticFiles();
app.UseEndpointRouting();
app.UseCookiePolicy();
app.UseCors("CorsPolicy");
app.UseIdentityServer();
// This method gets called by the runtime. Use this method to add services to the container.
public async void ConfigureServices(IServiceCollection services)
{
services.AddDataDogStatsd(Configuration, "identity");
// other code
}
}
解决方案
context.Request.Path
如果您的routeData
为空,则有条件地使用。这是我能想到的最接近的,因为 Identity Server 4 中间件具有用于标准 OAuth 协议路由的内部路由逻辑。
推荐阅读
- python - 如何将网页上的所有文本抓取到 python 中的特定标题?
- php - 具有不同颜色背景的帐户数组
- android - 从 XML 标记中提取和加载图像
- javascript - C# Date (server) => Json date/time (browser) => C# date/time with time part (server) issue
- python - python中id和相等的区别
- git - 如何将其转变为自定义基础设施作为代码管道?
- tensorflow - 在 hdfs 上保存 Keras 模型
- c++ - 我在使用 null 时遇到问题
- c# - 如何在保持项目文件 .mdf 完整的同时仅保存 bin 文件夹中的数据库更改
- python - 什么时候在python中将对象加载到内存中?