سلام دوستان
من میخام بصورت اتوماتیک برای وبسایتم سایت مپ تهیه کنم.ممنون میشم راهنمایی کنید از چه روشی استفاده کنم که هم سرعت بالایی داشته باشه و هم خیلی سریع و سبک باشه؟
ممنون
سلام دوستان
من میخام بصورت اتوماتیک برای وبسایتم سایت مپ تهیه کنم.ممنون میشم راهنمایی کنید از چه روشی استفاده کنم که هم سرعت بالایی داشته باشه و هم خیلی سریع و سبک باشه؟
ممنون
ببخشید من درست متوجه نشدم.کلاسهای زیر رو باید کجا بنویسم؟باید یه کلاس به نام sitemap بنویسم؟ممنون
public class SitemapNode
{
public SitemapFrequency? Frequency { get; set; }
public DateTime? LastModified { get; set; }
public double? Priority { get; set; }
public string Url { get; set; }
}
public enum SitemapFrequency
{
Never,
Yearly,
Monthly,
Weekly,
Daily,
Hourly,
Always
}
Now all we have to do is turn our collection of SitemapNode’s into XML:
public IReadOnlyCollection<SitemapNode> GetSitemapNodes(UrlHelper urlHelper)
{
List<SitemapNode> nodes = new List<SitemapNode>();
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetIndex"),
Priority = 1
});
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetAbout"),
Priority = 0.9
});
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetContact"),
Priority = 0.9
});
foreach (int productId in productRepository.GetProductIds())
{
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("ProductGetProduct", new { id = productId }),
Frequency = SitemapFrequency.Weekly,
Priority = 0.8
});
}
return nodes;
}
public class UrlHelperExtensions
{
public static string AbsoluteRouteUrl(
this UrlHelper urlHelper,
string routeName,
object routeValues = null)
{
string scheme = urlHelper.RequestContext.HttpContext.Request.Url.S cheme;
return urlHelper.RouteUrl(routeName, routeValues, scheme);
}
}
Converting SitemapNode's to XML
C#
public string GetSitemapDocument(IEnumerable<SitemapNode> sitemapNodes){ XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9"; XElement root = new XElement(xmlns + "urlset"); foreach (SitemapNode sitemapNode in sitemapNodes) { XElement urlElement = new XElement( xmlns + "url", new XElement(xmlns + "loc", Uri.EscapeUriString(sitemapNode.Url)), sitemapNode.LastModified == null ? null : new XElement( xmlns + "lastmod", sitemapNode.LastModified.Value.ToLocalTime().ToStr ing("yyyy-MM-ddTHH:mm:sszzz")), sitemapNode.Frequency == null ? null : new XElement( xmlns + "changefreq", sitemapNode.Frequency.Value.ToString().ToLowerInva riant()), sitemapNode.Priority == null ? null : new XElement( xmlns + "priority", sitemapNode.Priority.Value.ToString("F1", CultureInfo.InvariantCulture))); root.Add(urlElement); } XDocument document = new XDocument(root); return document.ToString();}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25public string GetSitemapDocument(IEnumerable<SitemapNode> sitemapNodes)
{
XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XElement root = new XElement(xmlns + "urlset");
foreach (SitemapNode sitemapNode in sitemapNodes)
{
XElement urlElement = new XElement(
xmlns + "url",
new XElement(xmlns + "loc", Uri.EscapeUriString(sitemapNode.Url)),
sitemapNode.LastModified == null ? null : new XElement(
xmlns + "lastmod",
sitemapNode.LastModified.Value.ToLocalTime().ToStr ing("yyyy-MM-ddTHH:mm:sszzz")),
sitemapNode.Frequency == null ? null : new XElement(
xmlns + "changefreq",
sitemapNode.Frequency.Value.ToString().ToLowerInva riant()),
sitemapNode.Priority == null ? null : new XElement(
xmlns + "priority",
sitemapNode.Priority.Value.ToString("F1", CultureInfo.InvariantCulture)));
root.Add(urlElement);
}
XDocument document = new XDocument(root);
return document.ToString();
}
بله ، کلاس هایی شامل :
public class SitemapNode
{
public SitemapFrequency? Frequency { get; set; }
public DateTime? LastModified { get; set; }
public double? Priority { get; set; }
public string Url { get; set; }
}
public enum SitemapFrequency
{
Never,
Yearly,
Monthly,
Weekly,
Daily,
Hourly,
Always
}
public IReadOnlyCollection<SitemapNode> GetSitemapNodes(UrlHelper urlHelper)
{
List<SitemapNode> nodes = new List<SitemapNode>();
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetIndex"),
Priority = 1
});
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetAbout"),
Priority = 0.9
});
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("HomeGetContact"),
Priority = 0.9
});
foreach (int productId in productRepository.GetProductIds())
{
nodes.Add(
new SitemapNode()
{
Url = urlHelper.AbsoluteRouteUrl("ProductGetProduct", new { id = productId }),
Frequency = SitemapFrequency.Weekly,
Priority = 0.8
});
}
return nodes;
}
public class UrlHelperExtensions
{
public static string AbsoluteRouteUrl(
this UrlHelper urlHelper,
string routeName,
object routeValues = null)
{
string scheme = urlHelper.RequestContext.HttpContext.Request.Url.S cheme;
return urlHelper.RouteUrl(routeName, routeValues, scheme);
}
}
public string GetSitemapDocument(IEnumerable<SitemapNode> sitemapNodes)
{
XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XElement root = new XElement(xmlns + "urlset");
foreach (SitemapNode sitemapNode in sitemapNodes)
{
XElement urlElement = new XElement(
xmlns + "url",
new XElement(xmlns + "loc", Uri.EscapeUriString(sitemapNode.Url)),
sitemapNode.LastModified == null ? null : new XElement(
xmlns + "lastmod",
sitemapNode.LastModified.Value.ToLocalTime().ToStr ing("yyyy-MM-ddTHH:mm:sszzz")),
sitemapNode.Frequency == null ? null : new XElement(
xmlns + "changefreq",
sitemapNode.Frequency.Value.ToString().ToLowerInva riant()),
sitemapNode.Priority == null ? null : new XElement(
xmlns + "priority",
sitemapNode.Priority.Value.ToString("F1", CultureInfo.InvariantCulture)));
root.Add(urlElement);
}
XDocument document = new XDocument(root);
return document.ToString();
}
در Web.Config :
<configuration>
<system.webServer>
<handlers>
<add name="SitemapXml" path="sitemap.xml" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</configuration>
و در کنترلر :
[RoutePrefix("")]
public class HomeController : Controller
{
[Route("sitemap.xml")]
public ActionResult SitemapXml()
{
var sitemapNodes = GetSitemapNodes(this.Url);
string xml = GetSitemapDocument(sitemapNodes);
return this.Content(xml, ContentType.Xml, Encoding.UTF8);
}
}
در صورت نیاز میتونید ASP.NET MVC Boilerplate Project Template رو دانلود کنید تا پروژه رو داشته باشید .
آخرین ویرایش به وسیله Moien Tajik : چهارشنبه 03 خرداد 1396 در 15:45 عصر
سلام ممنون از راهنماییتون
من قسمت کلاسها رو متوجه نمیشم.به هر صورتی هم که مینویسم ارور دارم.ممنون میشم راهنمایی کنید این کلاسها رو چطور باید مرتب کنم؟