- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 C# 中使用 asp.net core v2.1 并制作了一个小网站。这个网站有 ExceptionsTracker
可以捕获所有未处理的异常。
internal class ExceptionTracker : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
// ...
string httpRequestInformation;
try
{
httpRequestInformation = context.HttpContext.Request.ToString(); // The problem here.
}
catch (Exception)
{
httpRequestInformation = string.Empty;
}
// ...
}
}
这背后的主要思想是将所有异常写入日志并能够在开发中重现它(运行产生异常的相同查询)。
当我用以前的 .NET 框架 (v4.6) 制作此行时context.HttpContext.Request.ToString()
,返回值是一个字符串,其中包含来自请求的所有信息(请求的 URL、 header 、正文...)。当我使用 .net core 时,返回值为
Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest
你有比手动构造这个字符串更好的解决方案吗?
谢谢!
根据@kennyzx的推荐,我做了一个简短的方法扩展来解决这个问题。
public static class HttpRequestExtensions
{
public static string GetDetails(this HttpRequest request)
{
string baseUrl = $"{request.Scheme}://{request.Host}{request.Path}{request.QueryString.Value}";
StringBuilder sbHeaders = new StringBuilder();
foreach (var header in request.Headers)
sbHeaders.Append($"{header.Key}: {header.Value}\n");
string body = "no-body";
if (request.Body.CanSeek)
{
request.Body.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(request.Body))
body = sr.ReadToEnd();
}
return $"{request.Protocol} {request.Method} {baseUrl}\n\n{sbHeaders}\n{body}";
}
}
如果您有更好的解决方案,请告诉我。
最佳答案
你得到了
a string that contain all the information from the request (requested URL, headers, body, ...).
通过在 v4.6 中调用 ToString()
因为该类覆盖了 System.Object.ToString()
方法,但在 asp.net core v2.1 中它确实如此不是,所以它只打印类的完整限定名,这是 System.Object.ToString()
的默认返回值。
你可以自己做,从 various properties 构造字符串它提供。你可以写一个 extension method喜欢
public static class MyExtensionClass
{
public static string GetDetails(this Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest request)
{
return request.PathString.Value + " " + ... ; //Construct your string here
}
}
像这样使用它
httpRequestInformation = context.HttpContext.Request.GetDetails();
关于c# - 可描述为字符串的 HttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51719462/
假设我的客户端(浏览器)请求我的 java 服务(服务 A)。 http://localhost:8080/getDataFromB 根据服务 A 的请求,我需要向服务 B 或服务 C 发出另一个 H
我正在尝试调用 API 来检索数据列表,此数据将帮助我获取图像源。因此,对于每个数据条目,我尝试调用图像 url 并使用 Parse Image 进行一些图像处理。问题是,内部的 httpReques
当前代码 if (!(context.Exception is exception)) HttpContent requestContent = context.Request.Content
我有这个代码: You are browsing this site with: Or with Request.UserAgent: 第一个在浏览器
我正在使用 Django 和 TornadIO2/Tornado 编写一个 socket.io 应用程序。在 TonradIO2 session 中,我可以访问 Tornado 的 HTTPReque
用于确定用户代理的这两个属性之间有什么区别(如果有)和优点/缺点? Dim strUserAgt as String userAgent = Request.userAgent 对比 Dim strU
详情如下:https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.httprequest?view=aspnetco
我一直在关注我网站的性能,在所有执行缓慢的代码 (>1s) 中,超过 90% 是因为 System.Web.HttpRequest.GetEntireRawContent()(由 System.Web
我有一个后端服务,它接受授权 header 来验证访问。我使用 Spring cloud zuul 创建了一个网关服务,并将请求路由到后端服务。 网关服务本身受 OAuth2 保护,并接受授权 hea
是否可以在中间件函数中获取请求方法(GET、POST、PUT...)? $myMiddleware = function (Request $request) { // This is wha
代码如下: //Get请求方式 private string RequestGet(string Url) &n
在 .net Framework yield ok. // if is not valid var request = HttpContext.Current.Req
在用于 http get 和 post 的 angular 5.2.x 中,我有以下代码: post(url: string, model: any): Observable { return thi
我试图了解如何从Dart进行Ajax调用。我对Web编程的了解非常有限。 我的简单服务器ajax.py:- #!/usr/bin/env python from datetime import tim
我正在为Http GET请求创建包装器类,但是当我使用HttpRequest.request时,没有任何响应。如果我使用原始的HttpRequests使用等效的代码,则可以使用。 我想念什么吗?我正在
我正在尝试生成一个 jmeter 脚本,其中每次运行脚本时都会创建一个唯一的文件夹 - 将某种变量添加到文件夹名称中,例如用户名+时间戳,应该足以保证唯一性。然而,jmeter 并没有将变量解析为其值
我有一个网络应用程序,它有一个计时器,每 3 秒触发一次轮询以获取数据。它工作正常大约 2.5 分钟,然后 Chromium 崩溃。 我的请求 Dart 看起来像这样 HttpRequest.getS
我目前有一个函数,可以生成 httpRequest 并将接收到的 json 解析为 URL array 。我想在第一个请求完成并且数据解析后触发第二个 httpRequest ,在我尝试过的两种解决方
我试图像这样延迟我的 $http 调用: githubService.getUserEvents = function getUserEvents() { return $timeout
我正在运行 340 个并发用户以使用 jmeter 在服务器上进行负载测试。 但是在大多数情况下,jmeter 挂断并且不会返回,即使我尝试关闭连接它也只是挂断了。最终我不得不关闭应用程序。 任何想法
我是一名优秀的程序员,十分优秀!