#c# #asp.net-mvc #httpwebrequest
#c# #asp.net-mvc #httpwebrequest запрос
Вопрос:
Я написал этот код для чтения данных с внешнего URL-адреса.
request.GetResponse()
бег занимает больше минуты и происходит очень медленно.
string responseContent;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://payroll/PayrollReport/getPaymentHistory?number=13990701amp;reason=21amp;username=8062122amp;Credential=E5ohh/BZDBWAQBE2R8tmbUSiVGJ2/ndI3AmqDiCMBylOIK/eAdRZog==");
request.Method = "GET";
request.Proxy = GlobalProxySelection.GetEmptyWebProxy(); // null;
System.Net.ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = false;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responseStream))
responseContent = sr.ReadToEnd();
}
}
Но при вызове этого URL-адреса с помощью post man выполняется очень быстро и работает менее 1000 мс.
В сетевом захвате только свойство местоположения отличается между c # и post man
Пожалуйста, помогите мне замедлить выполнение кода
Комментарии:
1. Используйте Fiddler для сравнения запросов. Мы не знаем, что происходит ни в вашей сети, ни на сервере расчета заработной платы. Кроме того, если вы, вероятно, нашли виновника, а именно, что Postman использует прокси, который работает быстро, а ваш код — нет, что медленно, почему вы не хотите использовать прокси? Или ваш актуальный вопрос «Как найти системный прокси по умолчанию» ?
2. Это сетевой вопрос. Мы не можем знать, почему ваша сеть вызывает задержки, если прокси-сервер не используется. Вы не можете исправить это с помощью кода, вы должны спросить своего сетевого администратора о правильных настройках. Я бы сказал, что они явно построили свою сеть так, чтобы только прокси-сервер имел быстрое исходящее соединение
3. Если соединения быстрее с прокси, почему бы вам не использовать прокси?
4.
only location property is different
это не «просто». То, что вы опубликовали, показывает перенаправление на другой URL-адрес, включая то, что выглядит как параметр сеанса. Еще раз, это не имеет ничего общего с HttpWebRequest
Ответ №1:
Я добавил AspxAutoDetectCookieSupport=1
в код, и проблема была решена.
Строка запроса AspxAutoDetectCookieSupport=1 добавляется автоматически с помощью ASP.NET на этапе обнаружения поддержки файлов cookie. Поскольку для атрибута cookieless в файле web.config установлено значение «Автоопределение», ASP.NET среда выполнения пытается определить, поддерживает ли браузер пользователя файлы cookie, и во время этого процесса добавляется параметр querystring. Если поддерживаются файлы cookie, идентификатор сеанса сохраняется в файле cookie, а если нет, идентификатор сеанса отправляется в URL всех будущих запросов этого пользователя.
Uri target = new Uri("http://payroll/PayrollReport/getPaymentHistory?number=13990701amp;reason=21amp;username=8062122amp;Credential=E5ohh/BZDBWAQBE2R8tmbUSiVGJ2/ndI3AmqDiCMBylOIK/eAdRZog==");
string responseContent;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(target);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(new Cookie("AspxAutoDetectCookieSupport", "1") { Domain = target.Host });
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responseStream))
responseContent = sr.ReadToEnd();
}
}