Посещение другого URL на сервере с помощью кода и извлечение некоторых данных оттуда - PullRequest
0 голосов
/ 07 января 2012

Я работаю в Asp.net MVC и у меня есть особое требование, о котором я понятия не имею.

Я хочу, чтобы, когда пользователь запрашивает определенный URL-адрес с моего сайта, я хотел посетитьпредварительно установить URL в базе данных и извлечь некоторые данные и связать их с View перед рендерингом.

Например, если вы посещаете mysite.com / Search / Index , то в моем методе действия Index , я хочу посетить anothersite.com / someparticular / url , извлечь значение в <div> с id = "searclbl", связать его с моим представлением и отобразить страницу.

Мне нужно прочитать HTML, потому что сайты, с которыми я работаю, не предлагают никаких веб-сервисов или RSS.

Любая помощь или руководство в этом вопросе приветствуется.

1 Ответ

2 голосов
/ 07 января 2012

Я полагаю, что вы можете выполнить это, используя HtmlAgilityPack (который можно установить с помощью пакета NuGet внутри вашего проекта).

Например: предположим, что ваш индексный видSearchController строго типизирован для следующего ViewModel:

public class SearchViewModel
{
    public string DivElement { get; set; }
    //other properties...
}

Это Index ActionResult ():

public ActionResult Index()
{
    var model = new SearchViewModel();
    model.DivElement = GetDivFromWebSite();

    return View(model);
}

В методе GetDivFromWebSite () я использую HtmlAgilityPack для получения информации издругой веб-сайт и определяется следующим образом:

private string GetDivFromWebSite()
{
    var baseUrl = new Uri("http://www.anotherdomaine.com");
    HtmlAgilityPack.HtmlDocument document = new HtmlDocument();
    using (WebClient client = new WebClient())
    {
        document.Load(client.OpenRead(baseUrl));
    }

    if (document == null) return "nothing found!";
    var div = document.DocumentNode.SelectNodes("//div[@id='missing-category']").FirstOrDefault();

    return div.InnerHtml;
}

Этот может добиться цели!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...