В качестве резервной копии JavaScript (или вашего единственного решения) вы можете использовать мой плагин jQuery Scalem , который позволяет масштабировать относительно родительского элемента (контейнера), передавая параметр reference
.
Исходя из ваших комментариев, вы можете подумать о написании метода расширения :
public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
return false;
}
if (httpRequest.CookieContainer == null)
{
httpRequest.CookieContainer = new CookieContainer();
}
httpRequest.CookieContainer.Add(cookie);
return true;
}
Тогда вы можете иметь код типа:
WebRequest webRequest = WebRequest.Create( uri );
webRequest.TryAddCookie(new Cookie("someName","someValue"));
Попробуйте что-то вроде этого:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/default.html");
request.CookieContainer.Add(new Cookie("ConstoCookie", "Chocolate Flavour"));
Object reference not set to an...
. Сначала нам может понадобиться request.CookieContainer = new CookieContainer();
, тогда вызов метода Add должен работать.
– shashwat
4 November 2012 в 08:46
WebRequest - это абстрактный класс, который не имеет свойства CookieContainer. Кроме того, вы не можете использовать коллекцию заголовков (исключение не реализовано), поэтому любая попытка, например webRequest.Headers.Add («Cookie», «...»), не будет выполнена.
Извините, но у вас есть нет возможности использовать файлы cookie с помощью WebRequest.
Придерживайтесь HttpWebRequest и добавляйте / редактируйте столько куки, которые вам нравятся, используя коллекцию Headers!
Ответ dlev закончил работу, но у меня возникли проблемы с реализацией решения («Параметр« {0} »не может быть пустой строкой.), поэтому я решил написать полный код, если у кого-то еще есть подобные проблемы.
Моя цель состояла в том, чтобы получить html в виде строки, но мне нужно было добавить файлы cookie в веб-запрос. Это функция, которая загружает строку с помощью файлов cookie:
public static string DownloadString(string url, Encoding encoding, IDictionary<string, string> cookieNameValues)
{
using (var webClient = new WebClient())
{
var uri = new Uri(url);
var webRequest = WebRequest.Create(uri);
foreach(var nameValue in cookieNameValues)
{
webRequest.TryAddCookie(new Cookie(nameValue.Key, nameValue.Value, "/", uri.Host));
}
var response = webRequest.GetResponse();
var receiveStream = response.GetResponseStream();
var readStream = new StreamReader(receiveStream, encoding);
var htmlCode = readStream.ReadToEnd();
return htmlCode;
}
}
Мы используем код из ответа dlev:
public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
return false;
}
if (httpRequest.CookieContainer == null)
{
httpRequest.CookieContainer = new CookieContainer();
}
httpRequest.CookieContainer.Add(cookie);
return true;
}
Вот как вы используете полный код:
var cookieNameValues = new Dictionary<string, string>();
cookieNameValues.Add("varName", "varValue");
var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);