Мне интересно в какой сфере применяют ASP
// получаем json:
string json = JsonConvert.SerializeObject(cookieDictionary);
// получаем экземпляр CookieDictionary из json:
var cookieDictionary2 = JsonConvert.DeserializeObject<CookieDictionary>(json);
// string cookiesRaw = File.ReadAllText(string.Format("Cookies_{0}.txt", textBox1.Text));
string cookiesRaw = "ключ1=значение1; ключ2=значение2";
var cookies = cookiesRaw.Split(';').Select(itm => itm.Split('=')).
ToDictionary(k => k[0].Trim(), v => v[1].Trim());
httpRequest.Cookies = new CookieDictionary();
foreach(var item in cookies)
{
httpRequest.Cookies.Add(item.Key, item.Value);
}
public class Backup
{
public Basic Basic { get; set; }
public List<Base> Bases { get; set; }
}
public class Basic
{
public string Path1C { get; set; }
}
public class Base
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string Mode { get; set; }
[XmlAttribute]
public string Path { get; set; }
}
// из строки
string source =
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(source)))
{
var serializer = new XmlSerializer(typeof(Backup));
var backup = (Backup)serializer.Deserialize(ms);
foreach (var b in backup.Bases)
{
Console.WriteLine("Name: {0}", b.Name);
Console.WriteLine("MODE: {0}", b.Mode);
Console.WriteLine("Path: {0}", b.Path);
}
}
var xml = new XmlDocument();
// из файла:
// xml.Load("XMLFile1.xml");
// из строки
xml.LoadXml
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
// читаем и выводим все элементы Base из /Backup/Bases:
foreach (XmlNode n in xml.SelectNodes("/Backup/Bases/Base"))
{
Console.WriteLine("Name: {0}", n.Attributes["Name"].Value);
Console.WriteLine("MODE: {0}", n.Attributes["MODE"].Value);
Console.WriteLine("Path: {0}", n.Attributes["Path"].Value);
}
string source =
(
@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Backup>
<Basic>
<Path1C>\\server\1cv8s.exe</Path1C>
</Basic>
<Bases>
<Base Name=""b1"" MODE=""File"" Path=""\\server\Base\base""/>
<Base Name=""bas2"" MODE=""Server"" Path=""\\server\db""/>
</Bases>
</Backup>"
);
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(source)))
// если из файла, то без MemoryStream; или лучше использовать FileStream
// using (var xml = XmlReader.Create("XMLFile1.xml"))
using (var xml = XmlReader.Create(ms))
{
while (xml.Read())
{
switch (xml.NodeType)
{
case XmlNodeType.Element:
// нашли элемент Base
if (xml.Name == "Base")
{
// выводим атрибуты
Console.WriteLine("Name: {0}", xml.GetAttribute("Name"));
Console.WriteLine("MODE: {0}", xml.GetAttribute("MODE"));
Console.WriteLine("Path: {0}", xml.GetAttribute("Path"));
}
break;
}
}
}
var file1 = new Attachment(textBox9.Text + "1.png");
var file1 = new Attachment(textBox9.Text + "1.png", "image/png");
var file1 = new Attachment(Path.Combine(textBox9.Text, "1.png"), "image/png");
var result = new List<string>();
foreach (Match m in matches)
{
result.Add(m.Value);
}
// в result будет коллекция строк
using System.Linq;
var stringArray = matches.Cast<Match>().Select(m => m.Value).ToArray();
private void propertyGrid1_PropertyValueChanged(Object sender, PropertyValueChangedEventArgs e)
{
System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "ChangedItem", e.ChangedItem );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "OldValue", e.OldValue );
messageBoxCS.AppendLine();
MessageBox.Show(messageBoxCS.ToString(), "PropertyValueChanged Event" );
}
var data = (JObject)JsonConvert.DeserializeObject("данные JSON");
foreach(JObject item in data["response"]["items"])
{
// var photos = item.Properties().Where(p => p.Name.StartsWith("photo_")).ToArray();
// если считать, что последнее изображение самое большое
var photo = item.Properties().LastOrDefault(p => p.Name.StartsWith("photo_") &&
p.Value != null &&
p.Value.ToString() != ""
);
/*
// вариант с извлечением номера и сортировкой
// при условии, что после photo_ всегда будет число
// (если нет, то придется это учитывать отдельно)
var photo = item.Properties().Where(p => p.Name.StartsWith("photo_") &&
p.Value != null &&
p.Value.ToString() != ""
).OrderBy(p => Convert.ToInt32(p.Name.Substring(p.Name.LastIndexOf("_") + 1))).LastOrDefault();
*/
if (photo != null)
{
// выводим адрес изображения в консоль
Console.WriteLine(photo.Value.ToString());
}
}
private async Task<string> Get(string url)
{
using (var client = new HttpClient())
{
using (var r = await client.GetAsync(new Uri(url)))
{
return await r.Content.ReadAsStringAsync();
}
}
}
string result = await Get("https://toster.ru/q/470456");
private void Get(string url)
{
Task.Run(async () =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = await req.GetResponseAsync();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = await sr.ReadToEndAsync();
sr.Close();
// передаем результат
ResultCallback(url, result);
});
}
private void ResultCallback(string url, string result)
{
// выводим в консоль результат
Console.WriteLine(url);
Console.WriteLine(result);
}
private void Get(string url)
{
Task.Run(async () =>
{
using (var client = new HttpClient())
{
using (var r = await client.GetAsync(new Uri(url)))
{
string result = await r.Content.ReadAsStringAsync();
ResultCallback(url, result);
}
}
});
}
private void Get(string url)
{
// выполняем запрос в отдельном потоке
Task.Run(() =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = sr.ReadToEnd();
sr.Close();
// передаем результат в функцию обратного вызова
ResultCallback(url, result);
});
}
private void ResultCallback(string url, string result)
{
Console.WriteLine(url);
Console.WriteLine(result);
}
private void Get(string url)
{
// создаем поток
var t = new Thread(() =>
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string result = sr.ReadToEnd();
sr.Close();
ResultCallback(url, result);
});
// запускаем
t.Start();
}
private void ResultCallback(string url, string result)
{
Console.WriteLine(url);
Console.WriteLine(result);
}
@{
var grid = new WebGrid(/*...*/);
}
@grid.GetHtml(mode: WebGridPagerModes.Numeric, numericLinksCount: 10)
или отдельно список страниц:
@grid.Pager(numericLinksCount: 10)
public IHtmlString GetHtml( string tableStyle, string headerStyle, string footerStyle, string rowStyle, string alternatingRowStyle, string selectedRowStyle, string caption, bool displayHeader, bool fillEmptyRows, string emptyRowCellValue, IEnumerable<WebGridColumn> columns, IEnumerable<string> exclusions, WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount, Object htmlAttributes )
numericLinksCount
Тип: System.Int32
Число цифровых ссылок на ближайшие страницы WebGrid. Текст каждой цифровой ссылки на страницу содержит номер страницы. Задайте флаг Numeric параметра mode, чтобы эти элементы управления отображались на странице.
public HelperResult Pager( WebGridPagerModes mode, string firstText, string previousText, string nextText, string lastText, int numericLinksCount )
numericLinksCount
Тип: System.Int32
Число отображаемых цифровых ссылок на страницы. По умолчанию используется значение 5.
// входящие данные
var arr = new int[] { 5, 10, 7, 123, 0 };
// Console.WriteLine(String.Join("+", arr.OrderBy(n => n).Select(n => n.ToString())));
// сортируем
var sorted = arr.OrderBy(n => n);
// склеиваем
Console.WriteLine(String.Join("+", sorted.Select(n => n.ToString())));
// или без вызова ToString(), если используемая версия .NET позволит:
// Console.WriteLine(String.Join("+", sorted));
// или с вызовом ToArray() для ранних версий .NET:
// String.Join("+", sorted.Select(n => n.ToString()).ToArray())
mono helloworld.exe
dotnet helloworld.exe
# выполнение из исходного кода в текущем каталоге:
dotnet run
using System;
using System.Drawing;
using System.Net.Http;
using System.Windows.Forms;
using Nemiro.OAuth;
using Nemiro.OAuth.LoginForms;
namespace InstagramWinForms
{
public partial class Form1 : Form
{
// базовый адрес API
private const string API_BASE_URL = "https://api.instagram.com/v1";
// элемент для хранения полученных изображений
private ImageList ImageList = new ImageList();
// элемент для вывода изображений
private ListView ListView1 = new ListView();
private string AccessToken;
public Form1()
{
InitializeComponent();
// размер изображений 150x150px, 16bit
this.ImageList.ImageSize = new Size(150, 150);
this.ImageList.ColorDepth = ColorDepth.Depth16Bit;
// настраиваем список для вывода
this.ListView1.View = View.LargeIcon;
this.ListView1.LargeImageList = this.ImageList;
this.ListView1.Dock = DockStyle.Fill;
// добавляем список на форму
this.Controls.Add(this.ListView1);
}
private void Form1_Load(object sender, EventArgs e)
{
// запрос на получение маркера доступа
this.GetAccessToken();
}
private void GetAccessToken()
{
// создаем форму для Instagram
// ВНИМАНИЕ: используйте собственный идентификатор и ключ
// получить идентификатор и ключ можно на сайте instagram:
// https://www.instagram.com/developer/clients/manage/
var login = new InstagramLogin
(
// client id вашего приложения
"9fcad1f7740b4b66ba9a0357eb9b7dda",
// client key вашего приложения
"3f04cbf48f194739a10d4911c93dcece",
// требуется адрес возврата,
// можно использовать указанный,
// но лучше сделать свой
"http://oauthproxy.nemiro.net/",
// права доступа
// https://www.instagram.com/developer/authorization/
// для public_content (и возможно других) убедитесь,
// что в настройках приложения (на сайте instagram)
// в разделе Permissions нет никаких требований
// (если требования есть, то чтобы все работало,
// нужно их удовлетворить :-) ...)
scope: "basic public_content",
// требуем получить данные профиля пользователя
loadUserInfo: true
);
// привязываем форму авторизации к текущей форме
login.Owner = this;
// показываем форму
login.ShowDialog();
if (login.IsSuccessfully)
{
// все прошло успешно, запоминаем маркер доступа
this.AccessToken = login.AccessToken.Value;
// выводим в заголовок текущей формы имя пользователя
this.Text = (login.UserInfo.DisplayName ?? login.UserInfo.UserName);
// получаем изображения
this.GetRecentMedia();
}
else
{
MessageBox.Show("Error...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void GetRecentMedia()
{
// отправляем запрос на получение изображений
OAuthUtility.GetAsync
(
String.Format
(
"{0}/users/self/media/recent?access_token={1}",
API_BASE_URL,
this.AccessToken
),
// результат запроса будет передан в метод GetRecentMedia_Result
callback: GetRecentMedia_Result
);
}
private async void GetRecentMedia_Result(RequestResult result)
{
if (result.StatusCode == 200)
{
// получили успешный ответ
// обрабатываем его
foreach (UniValue item in result["data"])
{
// загружаем текущую картинку
using (var client = new HttpClient())
{
var s = await client.GetStreamAsync(item["images"]["thumbnail"]["url"].ToString());
// добавляем изображение в список
Invoke(new Action(() => this.ImageList.Images.Add(Image.FromStream(s))));
}
// создаем элемент для вывода в список
var image = new ListViewItem();
// название изображения
image.Text = item["caption"]["text"].ToString();
// индекс изображения в списке (ImageList)
image.ImageIndex = this.ImageList.Images.Count - 1;
// добавляем элемент в список
Invoke(new Action(() => this.ListView1.Items.Add(image)));
}
}
else
{
this.ShowError(result);
}
}
private void ShowError(RequestResult result)
{
if (result["meta"]["error_message"].HasValue)
{
MessageBox.Show
(
result["meta"]["error_message"].ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
else
{
MessageBox.Show
(
result.ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.GetRecentMedia();
}
}
}
// .* - может съесть лишнего,
// если есть возможность, лучше строго ограничивать
// в данном случае четкой границей
// может служить открытие следующего тега (<)
// "(.+?)<div" имеет смысл использовать, если в искомом тексте могут быть другие теги
// class="margin-top-xx-small" тоже можно использовать,
// но только если это действительно необходимо
var pattern = @"<div(\s+)class=""currency-table__rate__text"">(?<data>[^\<]+)<";
var reg = new Regex(pattern, RegexOptions.IgnoreCase);
var m = reg.Match(value); // вместо value переменная с данными для разбора
var result = m.Groups["data"].Value.Trim();
Console.WriteLine(result);
Server=localhost;Database=example;UID=username;Password=password
var connectionString = "Server=localhost;Database=example;UID=username;Password=password";
using (var connection = new MySqlConnection(connectionString))
{
// открываем соединение
connection.Open();
// создаем команду
var cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = "SELECT * FROM table1";
// создаем адаптер
var adapter = new MySqlDataAdapter(cmd);
// создаем таблицу
var table = new DataTable();
// получаем данные в таблицу
adapter.Fill(table);
// выводим
foreach (DataRow row in table.Rows)
{
Console.WriteLine(row[0]);
}
}
<configuration>
<startup>
<supportedRuntime version="v4.0" />
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
также хотелось бы узнать как компилировать в месте с ним.