Обслуживание Dynami c Карта сайта. xml Содержание - PullRequest
0 голосов
/ 18 января 2020

Как мне подать динамический c sitemap.xml файл из ASP. NET Core 3.1?

Я пробовал что-то вроде:

...
public ActionResult SiteMap()
{
    // logic here
    return Content("<sitemap>...</sitemap>", "text/xml");
}
...

1 Ответ

0 голосов
/ 18 января 2020

Да, это абсолютно правильный подход. Конечно, при условии, что вы используете стандартный протокол карты сайта , вам необходимо:

  1. Establi sh XML объявление (например, <?xml version="1.0" encoding="UTF-8"?>)
  2. Начните с элемента <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />

Так, например, если вы хотите собрать XML, используя XDocument, вы можете начать с чего-то вроде:

private static readonly XNamespace _sitemapNamespace = "http://www.sitemaps.org/schemas/sitemap/0.9";
private static readonly XNamespace _pagemapNamespace = "http://www.google.com/schemas/sitemap-pagemap/1.0";

public ActionResult Sitemap() {
  var xml = new XDocument(
    new XDeclaration("1.0", "utf-8", String.Empty),
    new XElement(_sitemapNamespace + "urlset",
      //Your logic here
    )
  return Content(sitemap.ToString(), "text/xml");
  );
}

Тем не менее, с этим кодом вы столкнетесь с проблемой, при которой ваше объявление XML не будет возвращено вместе с вашим XML, поскольку XDocument.ToString() возвращает только фрагмент XML. Чтобы это исправить, вам нужно обернуть XDocument, например, в StringWriter:

var sitemapFile = new StringBuilder();
using (var writer = new StringWriter(sitemapFile)) {
  sitemap.Save(writer);
}
return Content(sitemapFile.ToString(), "text/xml");

Примечание: Существуют и другие подходы для динамической генерации XML. Если вы используете XmlWriter или XmlDocument, ваш код будет выглядеть совсем иначе. Суть в том, чтобы помочь заполнить то, как может выглядеть реальная реализация , а не предписывать эксклюзивный подход.

Существуют ли конкретные проблемы c, с которыми вы работаете с вашей попыткой? Если это так, я могу дать более подробное руководство c. Но подход, который вы используете, является правильным.

...