gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中创建 SiteMap

转载 作者:行者123 更新时间:2023-12-02 01:01:23 31 4
gpt4 key购买 nike

我想为 ASP.NET MVC 站点创建 SiteMap。我写这段代码

[XmlRoot("urlset", Namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")]
public class Sitemap
{
private ArrayList _map;

public Sitemap()
{
_map = new ArrayList();
}

[XmlElement("url")]
public Location[] Locations
{
get
{
Location[] items = new Location[_map.Count];
_map.CopyTo(items);
return items;
}
set
{
if (value == null)
return;
var items = (Location[])value;
_map.Clear();
foreach (Location item in items)
_map.Add(item);
}
}

public int Add(Location item)
{
return _map.Add(item);
}
}

public class Location
{
public enum EChangeFrequency
{
Always,
Hourly,
Daily,
Weekly,
Monthly,
Yearly,
Never
}

[XmlElement("loc")]
public string Url { get; set; }

[XmlElement("changefreq")]
public EChangeFrequency? ChangeFrequency { get; set; }
public bool ShouldSerializeChangeFrequency() { return ChangeFrequency.HasValue; }

[XmlElement("lastmod")]
public DateTime? LastModified { get; set; }
public bool ShouldSerializeLastModified() { return LastModified.HasValue; }

[XmlElement("priority")]
public double? Priority { get; set; }
public bool ShouldSerializePriority() { return Priority.HasValue; }
}

public class XmlResult : ActionResult
{
private readonly object _objectToSerialize;

public XmlResult(object objectToSerialize)
{
_objectToSerialize = objectToSerialize;
}

public object ObjectToSerialize
{
get { return _objectToSerialize; }
}

public override void ExecuteResult(ControllerContext context)
{
if (_objectToSerialize != null)
{
context.HttpContext.Response.Clear();
var xs = new XmlSerializer(_objectToSerialize.GetType());
context.HttpContext.Response.ContentType = "text/xml";
xs.Serialize(context.HttpContext.Response.Output, _objectToSerialize);
}
}
}

并像这样在 NewsFeedController 中创建 Sitemap 操作

 public ActionResult Sitemap()
{
var sm = new Sitemap();
sm.Add(new Location()
{
Url = string.Format("http://www.TechnoDesign.ir/Articles/{0}/{1}", 1, "SEO-in-ASP.NET-MVC"),
LastModified = DateTime.UtcNow,
Priority = 0.5D
});
return new XmlResult(sm);
}

并在 RouteConfig 中像这样为 SiteMap 定义新路由

 public static void RegisterRoutes(RouteCollection routes)
{


routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"SiteMap_route", // Route name
"sitemap.xml", // URL with parameters
new { controller = "NewsFeed", action = "Sitemap", name = UrlParameter.Optional, area = "" }, // Parameter defaults
namespaces: new[] { "Web.Controllers" }
);

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Web.Controllers" }
);

}

但是当输入 /sitemap.xml 得到 error 404

最佳答案

我们对 MvcSiteMapProvider 也有同样的问题适用于 MVC 4 及更高版本。我们通过删除然后替换 web.config 文件中的 UrlRoutingModule 解决了这个问题。

<configuration>
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
</modules>
</system.webServer>
</configuration>

关于asp.net-mvc - 在 ASP.NET MVC 中创建 SiteMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211845/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com