Требуется спарсить данное значение из g_steamID средствами C#
Ну если у вас есть html от которого нужен только steamID, то:
string html = "<script> g_steamID = \"7786578\" ddd"; // Для примера
int startIndex = html.IndexOf("steamID");
startIndex = html.IndexOf('\"', startIndex);
string steamID = "";
while (startIndex < html.Length && html[startIndex + 1] != '\"')
steamID += html[++startIndex];
// steamID = "7786578" (Без кавычек)
Код написан втупую, но основной посыл должен быть понятен. Можно и через регулярку, но думать сейчас уже не в состоянии.
У тебя в пределах html старницы профиля есть ещё один script-текст, который вроде бы всегда содержит SteamId. Парси тогда из него, раз в первом скрипте может быть false
вместо целевого значения. Во втором скрипте он всегда инициализирован реальным значением. Забирай хоть регуляркой, хоть String.Split
, чем душе угодно.
Если дело не обходится одним только SteamId, то гораздо удобнее сразу юзать какую-нибудь либу. Вон вверху советовали HtmlAgilityPack. Я предпочитаю для таких вещей AngleSharp. Пример дал ниже. Но для парсинга единственного значения это конечно как из пушки по воробьям.
using AngleSharp.Dom.Html;
using AngleSharp.Parser.Html;
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace StackOverflowQuestion
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void ButtonParse_Click(object sender, EventArgs e)
{
string steamId = await ParseSteamId();
}
private async Task<string> ParseSteamId()
{
// Грузим нужную нам страницу
string url = "https://steamcommunity.com/id/blyagdeya";
string html = await LoadHtml(url);
// Создаём экземпляр парсера из AngleSharp
HtmlParser parser = new HtmlParser();
IHtmlDocument document = parser.Parse(html);
// Парсим нужный нам элемент html страницы. Div класса 'responsive_page_template_content' является уникальным в пределах всей страницы
// и включает в себя целевой скрипт, текст которого уже всегда(*) включает SteamId.
// *Я просмотрел 10 случайных профилей, для всех случаев SteamId был инициализирован реальным значением, никаких 'false'.
var targetScriptWithSteamId = document.QuerySelector(".responsive_page_template_content > script"); // Селекторы тут https://www.w3.org/TR/selectors/
string scriptText = targetScriptWithSteamId?.TextContent;
string id = scriptText.Split(new string[] { "steamid\":\"", "\",\"" }, 3, StringSplitOptions.RemoveEmptyEntries)[1];
return id;
}
private async Task<string> LoadHtml(string url)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);
string source = null;
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
source = await response.Content.ReadAsStringAsync();
}
return source;
}
}
}
Первоначально при запуске TextBox пустой, если я начинаю в нем что то печатать, а потом удаляю все, чтобы он был пустой, то появляется ошибка валидацииНо...
На данный вопрос уже ответили:
Всем добрый деньПытаюсь отправить AJAX форму на сервер, но метод контроллера, которым должна обрабатываться форма, не вызывается