C# 记录WebClient的请求、响应和异常
我想记录(保存到数据库或文件等)除WebClient之外的所有请求和响应。 我使用派生类:公共类GzipWebClient:WebClient{…} 我应该在哪里捕捉到上传带有数据的请求、下载响应和异常?或者我应该重写一些方法吗 我可以使用“受保护的覆盖WebRequest GetWebRequest(Uri地址)”捕获数据吗 有些人使用:C# 记录WebClient的请求、响应和异常,c#,.net,web,C#,.net,Web,我想记录(保存到数据库或文件等)除WebClient之外的所有请求和响应。 我使用派生类:公共类GzipWebClient:WebClient{…} 我应该在哪里捕捉到上传带有数据的请求、下载响应和异常?或者我应该重写一些方法吗 我可以使用“受保护的覆盖WebRequest GetWebRequest(Uri地址)”捕获数据吗 有些人使用: private T GetDeserializedResponse<T>(string url) { using
private T GetDeserializedResponse<T>(string url)
{
using (var wc = new GzipWebClient())
{
wc.Encoding = Encoding.UTF8;
string fullUrl = BaseUrl + url;
string response = wc.DownloadString(fullUrl);
try
{
return JsonConvert.DeserializeObject<T>(response);
}
catch
{
_logger.Error(response);
throw;
}
}
}
private T GetDeserializedResponse(字符串url)
{
使用(var wc=new GzipWebClient())
{
wc.Encoding=Encoding.UTF8;
字符串fullUrl=BaseUrl+url;
字符串响应=wc.DownloadString(fullUrl);
尝试
{
返回JsonConvert.DeserializeObject(响应);
}
抓住
{
_记录器。错误(响应);
投掷;
}
}
}
或
string url=shop.Warehouse!=无效的
string.Format(“/api/v1/cabinet/{0}/shop_create.json”,MasterApiKey):
格式(“/api/v1/{0}/shop_create.json”,MasterApiKey);
字符串名称=shop.name;
字符串namePostfix=DateTime.Now.ToString(“yyMMddhhmmss”);
如果((名称+名称后缀).Length>64)
name=name.Substring(0,64-namePostfix.Length);
字符串数据=shop.Warehouse!=无效的
string.Format(“name={0}&warehouse={1}&address={2}”,name+namePostfix,shop.warehouse.Id,shop.address):
格式(“name={0}&address={1}”,name+namePostfix,shop.address);
使用(var wc=new GzipWebClient())
{
wc.Headers[HttpRequestHeader.ContentType]=“application/x-www-form-urlencoded”;
wc.Encoding=Encoding.UTF8;
字符串fullUrl=BaseUrl+url;
字符串响应=wc.UploadString(完整URL,数据);
var shopData=JsonConvert.DeserializeObject(响应);
如果(!shopData.Success)
{
抛出新DeliveryCreateStoreException(shop.Name);
}
if(string.IsNullOrEmpty(shopData.IdKeyPair.Key))
{
抛出新DeliveryCreateStoreException(shop.Name);
}
shop.Id=shopData.IdKeyPair.Id;
shop.Key=shopData.IdKeyPair.Key;
退货店;
}
您必须在应用程序的最低点记录异常,如果您有,则必须在DAL中记录异常,以便处理数据库的异常。您必须在应用程序的最低点记录异常,如果为了处理数据库的异常,请在DAL中记录异常。如果为了处理数据库的异常,您必须在应用程序的最低点记录异常n。如果为了处理数据库的异常,请在DAL中记录异常n。您必须在应用程序的最低点记录异常n,在DAL中,如果您使用它来处理数据库的异常。调用web服务,如果您使用.Net 4.5,则使用HttpClient
会更容易
您可以像这样创建LoggingHandler
:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler()
: this(new HttpClientHandler())
{ }
public LoggingHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{ }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var activityId = Guid.NewGuid();
using (new Tracer("Service Call", activityId))
{
var entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Request" };
if (Logger.ShouldLog(entry))
{
entry.Message = request.ToString();
if (request.Content != null)
{
entry.Message += Environment.NewLine;
entry.Message += await request.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
}
Logger.Write(entry);
}
var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Response" };
if (Logger.ShouldLog(entry))
{
entry.Message = response.ToString();
if (response.Content != null)
entry.Message += await response.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
Logger.Write(entry);
}
return response;
}
}
}
HttpClient
类的文档:
比较调用web服务的
HttpClient
和WebClient
,如果使用.Net 4.5,使用HttpClient
会更容易
您可以像这样创建LoggingHandler
:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler()
: this(new HttpClientHandler())
{ }
public LoggingHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{ }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var activityId = Guid.NewGuid();
using (new Tracer("Service Call", activityId))
{
var entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Request" };
if (Logger.ShouldLog(entry))
{
entry.Message = request.ToString();
if (request.Content != null)
{
entry.Message += Environment.NewLine;
entry.Message += await request.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
}
Logger.Write(entry);
}
var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Response" };
if (Logger.ShouldLog(entry))
{
entry.Message = response.ToString();
if (response.Content != null)
entry.Message += await response.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
Logger.Write(entry);
}
return response;
}
}
}
HttpClient
类的文档:
比较调用web服务的
HttpClient
和WebClient
,如果使用.Net 4.5,使用HttpClient
会更容易
您可以像这样创建LoggingHandler
:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler()
: this(new HttpClientHandler())
{ }
public LoggingHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{ }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var activityId = Guid.NewGuid();
using (new Tracer("Service Call", activityId))
{
var entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Request" };
if (Logger.ShouldLog(entry))
{
entry.Message = request.ToString();
if (request.Content != null)
{
entry.Message += Environment.NewLine;
entry.Message += await request.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
}
Logger.Write(entry);
}
var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Response" };
if (Logger.ShouldLog(entry))
{
entry.Message = response.ToString();
if (response.Content != null)
entry.Message += await response.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
Logger.Write(entry);
}
return response;
}
}
}
HttpClient
类的文档:
比较调用web服务的
HttpClient
和WebClient
,如果使用.Net 4.5,使用HttpClient
会更容易
您可以像这样创建LoggingHandler
:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler()
: this(new HttpClientHandler())
{ }
public LoggingHandler(HttpMessageHandler innerHandler)
: base(innerHandler)
{ }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var activityId = Guid.NewGuid();
using (new Tracer("Service Call", activityId))
{
var entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Request" };
if (Logger.ShouldLog(entry))
{
entry.Message = request.ToString();
if (request.Content != null)
{
entry.Message += Environment.NewLine;
entry.Message += await request.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
}
Logger.Write(entry);
}
var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
entry = new LogEntry { Severity = TraceEventType.Verbose, Title = "Response" };
if (Logger.ShouldLog(entry))
{
entry.Message = response.ToString();
if (response.Content != null)
entry.Message += await response.Content
.ReadAsStringAsync()
.ConfigureAwait(false);
Logger.Write(entry);
}
return response;
}
}
}
HttpClient
类的文档:
比较
HttpClient
和WebClient
否,在我的情况下,我必须记录(或在分析日志后执行其他操作)与指定外部服务一起工作的逻辑中的任何响应(200404500等)。否,在我的情况下,我必须记录(或在分析日志后执行其他操作)任何响应(200404500等)在使用指定外部服务的逻辑中。不,在我的情况下,我必须在使用指定外部服务的逻辑中记录(或在分析日志后执行其他操作)任何响应(200404500等)。不,在我的情况下,我必须记录(或在分析日志后执行其他操作)任何响应(200404500等)在与指定的外部服务一起工作的逻辑中。请输入一些代码、调用、方法以外的内容;GzipWebClient是什么?我们可以看看你是如何/何时加载网页的吗?请输入一些代码、调用或其他方法;GzipWebClient是什么?我们可以看看你是如何/何时加载网页的吗?请输入一些代码、调用或其他方法;GzipWebClient是什么?我们可以看看你是如何/何时加载网页的吗?请输入一些代码、调用或其他方法;GzipWebClient是什么?我们可以看看你如何/何时加载网页吗?