Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 记录WebClient的请求、响应和异常_C#_.net_Web - Fatal编程技术网

C# 记录WebClient的请求、响应和异常

C# 记录WebClient的请求、响应和异常,c#,.net,web,C#,.net,Web,我想记录(保存到数据库或文件等)除WebClient之外的所有请求和响应。 我使用派生类:公共类GzipWebClient:WebClient{…} 我应该在哪里捕捉到上传带有数据的请求、下载响应和异常?或者我应该重写一些方法吗 我可以使用“受保护的覆盖WebRequest GetWebRequest(Uri地址)”捕获数据吗 有些人使用: private T GetDeserializedResponse<T>(string url) { using

我想记录(保存到数据库或文件等)除WebClient之外的所有请求和响应。 我使用派生类:公共类GzipWebClient:WebClient{…}

我应该在哪里捕捉到上传带有数据的请求、下载响应和异常?或者我应该重写一些方法吗

我可以使用“受保护的覆盖WebRequest GetWebRequest(Uri地址)”捕获数据吗

有些人使用:

    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是什么?我们可以看看你如何/何时加载网页吗?