gpt4 book ai didi

c# - 可描述为字符串的 HttpRequest

转载 作者:太空狗 更新时间:2023-10-29 20:35:49 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com