本文介绍了我使用ASP.net生成一个sitemap.xml,让Google网站管理员说:“您的Sitemap似乎是一个HTML页面。”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图返回一个生成的.xml文件,但是google会将它作为一个html页面。所以我得到:您的站点地图似乎是一个HTML页面,请改用受支持的站点地图格式。



这里是ASP。生成sitemap.xml的网络控制器

$ p $ [Route(sitemap.xml)]
public async Task< IActionResult> SitemapXmlAsync()
{

使用(var client = new HttpClient())
{
try
{
client.BaseAddress = new URI( https://api.badgag.com/api/generateSitemap);
var response = await client.GetAsync();
response.EnsureSuccessStatusCode();

var stringResult = await response.Content.ReadAsStringAsync();
var pages = JsonConvert.DeserializeObject< String []>(stringResult);

String xml =<?xml version = \1.0 \encoding = \utf-8 \?>;
xml + =< sitemapindex xmlns = \http://www.sitemaps.org/schemas/sitemap/0.9\>;

foreach(页面中的字符串s)
{

xml + =< sitemap>;
xml + =< loc> + s +< / loc>;
// xml + =< lastmod> + DateTime.Now.ToString(yyyy-MM-dd)+< / lastmod>;
xml + =< / sitemap>;
}

xml + =< / sitemapindex>;

返回Content(xml,text / xml);

$ b catch(HttpRequestException httpRequestException)
{
返回BadRequest($获取站点地图的错误:{httpRequestException.Message});
}
}

}

我假设我错过了一些东西。设置不同的标题?



您可以在这里看到结果:



预先感谢: )

解决方案

我找到,这帮助我创建了一个带有正确站点地图的sitemap.ashx文件Google和Bing需要的布局。

它基本上使用XmlTextWriter为站点地图生成所需的标记。这个例子使用HTTPContext来编写一个XML文件。这里是来自这个网站的代码:

  using System; 
使用System.Configuration;
使用System.Data;
使用System.Data.SqlClient;
使用System.Text;
使用System.Web;
使用System.Xml;

namespace Mikesdotnetting
{

public class Sitemaps:IHttpHandler
{

public void ProcessRequest(HttpContext context){
context.Response.ContentType =text / xml;
using(XmlTextWriter writer = new XmlTextWriter(context.Response.OutputStream,Encoding.UTF8)){
writer.WriteStartDocument();
writer.WriteStartElement(urlset);
writer.WriteAttributeString(xmlns,http://www.sitemaps.org/schemas/sitemap/0.9);
writer.WriteStartElement(url);

string connect = ConfigurationManager.ConnectionStrings [MyConnString]。ConnectionString;
string url =http://www.mikesdotnetting.com/;
using(SqlConnection conn = new SqlConnection(connect)){
using(SqlCommand cmd = new SqlCommand(GetSiteMapContent,conn)){
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
using(SqlDataReader rdr = cmd.ExecuteReader()){
//获取最近文章的日期
rdr.Read();
writer.WriteElementString(loc,string.Format({0} Default.aspx,url));
writer.WriteElementString(lastmod,string.Format({0:yyyy-MM-dd},rdr [0]));
writer.WriteElementString(changefreq,weekly);
writer.WriteElementString(priority,1.0);
writer.WriteEndElement();
//移动到文章ID
rdr.NextResult();
while(rdr.Read()){
writer.WriteStartElement(url);
writer.WriteElementString(loc,string.Format({0} Article.aspx?ArticleID = {1},url,rdr [0]));

if(rdr [1]!= DBNull.Value)
writer.WriteElementString(lastmod,string.Format({0:yyyy-MM-dd},rdr [ 1]));
writer.WriteElementString(changefreq,monthly);
writer.WriteElementString(priority,0.5);
writer.WriteEndElement();
}
//移动到文章类型ID
rdr.NextResult();
while(rdr.Read()){
writer.WriteStartElement(url);
writer.WriteElementString(loc,string.Format({0} ArticleTypes.aspx?Type = {1},url,rdr [0]));
writer.WriteElementString(priority,0.5);
writer.WriteEndElement();
}
//最后转到类别ID
rdr.NextResult();
while(rdr.Read()){
writer.WriteStartElement(url);
writer.WriteElementString(loc,string.Format({0} Category.aspx?Category = {1},url,rdr [0]));
writer.WriteElementString(priority,0.5);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
}
context.Response.End();





public bool IsReusable {
get {
return false;
}
}
}
}


I am trying to return an generated .xml file, but google picks it up as a html page. So I get: "Your Sitemap appears to be an HTML page. Please use a supported sitemap format instead."

Here is the ASP.net Controller that generate the sitemap.xml

[Route("sitemap.xml")]
public async Task<IActionResult> SitemapXmlAsync()
{

  using (var client = new HttpClient())
  {
    try
    {
      client.BaseAddress = new Uri("https://api.badgag.com/api/generateSitemap");
      var response = await client.GetAsync("");
      response.EnsureSuccessStatusCode();

      var stringResult = await response.Content.ReadAsStringAsync();
      var pages = JsonConvert.DeserializeObject<String[]>(stringResult);

      String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
      xml += "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";

      foreach (string s in pages)
      {

        xml += "<sitemap>";
        xml += "<loc>" + s + "</loc>";
        //xml += "<lastmod>" + DateTime.Now.ToString("yyyy-MM-dd") + "</lastmod>";
        xml += "</sitemap>";
      }

      xml += "</sitemapindex>";

      return Content(xml, "text/xml");

    }
    catch (HttpRequestException httpRequestException)
    {
      return BadRequest($"Error getting sitemap: {httpRequestException.Message}");
    }
  }

}

I assume I am missing something. Setting a different header?

You can see the result here:

https://badgag.com/sitemap.xml

Thanks in advance :)

解决方案

I found this article about creating a XML sitemap with ASP.Net, this helped me to create a sitemap.ashx file with the correct sitemap layout Google and Bing require.

It basically is using XmlTextWriter to generate the required tags for a sitemap. This example is using HTTPContext to write an XML file. Here is the code from this site:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web;
using System.Xml;

namespace Mikesdotnetting
{

    public class Sitemap : IHttpHandler
    {

        public void ProcessRequest(HttpContext context) {
            context.Response.ContentType = "text/xml";
            using (XmlTextWriter writer = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8)) {
                writer.WriteStartDocument();
                writer.WriteStartElement("urlset");
                writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
                writer.WriteStartElement("url");

                string connect = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
                string url = "http://www.mikesdotnetting.com/";
                using (SqlConnection conn = new SqlConnection(connect)) {
                    using (SqlCommand cmd = new SqlCommand("GetSiteMapContent", conn)) {
                        cmd.CommandType = CommandType.StoredProcedure;
                        conn.Open();
                        using (SqlDataReader rdr = cmd.ExecuteReader()) {
                            // Get the date of the most recent article
                            rdr.Read();
                            writer.WriteElementString("loc", string.Format("{0}Default.aspx", url));
                            writer.WriteElementString("lastmod", string.Format("{0:yyyy-MM-dd}", rdr[0]));
                            writer.WriteElementString("changefreq", "weekly");
                            writer.WriteElementString("priority", "1.0");
                            writer.WriteEndElement();
                            // Move to the Article IDs
                            rdr.NextResult();
                            while (rdr.Read()) {
                                writer.WriteStartElement("url");
                                writer.WriteElementString("loc", string.Format("{0}Article.aspx?ArticleID={1}", url,  rdr[0]));

                                if (rdr[1] != DBNull.Value)
                                writer.WriteElementString("lastmod", string.Format("{0:yyyy-MM-dd}", rdr[1]));
                                writer.WriteElementString("changefreq", "monthly");
                                writer.WriteElementString("priority", "0.5");
                                writer.WriteEndElement();
                            }
                            // Move to the Article Type IDs
                            rdr.NextResult();
                            while (rdr.Read()) {
                            writer.WriteStartElement("url");
                            writer.WriteElementString("loc", string.Format("{0}ArticleTypes.aspx?Type={1}", url, rdr[0]));
                            writer.WriteElementString("priority", "0.5");
                            writer.WriteEndElement();
                            }
                            // Finally move to the Category IDs
                            rdr.NextResult();
                            while (rdr.Read()) {
                                writer.WriteStartElement("url");
                                writer.WriteElementString("loc", string.Format("{0}Category.aspx?Category={1}", url, rdr[0]));
                                writer.WriteElementString("priority", "0.5");
                                writer.WriteEndElement();
                            }
                            writer.WriteEndElement();
                            writer.WriteEndDocument();
                            writer.Flush();
                        }
                        context.Response.End();
                    }
                }
            }
        }

        public bool IsReusable {
            get {
                return false;
            }
        }
    }
}

这篇关于我使用ASP.net生成一个sitemap.xml,让Google网站管理员说:“您的Sitemap似乎是一个HTML页面。”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 21:43