ورود

View Full Version : سایت مپ در mvc



sara_t
سه شنبه 02 خرداد 1396, 15:32 عصر
سلام دوستان

من میخام بصورت اتوماتیک برای وبسایتم سایت مپ تهیه کنم.ممنون میشم راهنمایی کنید از چه روشی استفاده کنم که هم سرعت بالایی داشته باشه و هم خیلی سریع و سبک باشه؟

ممنون

Moien Tajik
سه شنبه 02 خرداد 1396, 23:57 عصر
https://rehansaeed.com/dynamically-generating-sitemap-xml-for-asp-net-mvc/

sara_t
چهارشنبه 03 خرداد 1396, 12:12 عصر
ببخشید من درست متوجه نشدم.کلاسهای زیر رو باید کجا بنویسم؟باید یه کلاس به نام 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
}






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);
}
}




Now all we have to do is turn our collection of SitemapNode’s into XML:
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
25


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();
}

Moien Tajik
چهارشنبه 03 خرداد 1396, 15:24 عصر
بله ، کلاس هایی شامل :

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 رو دانلود کنید تا پروژه رو داشته باشید .

sara_t
پنج شنبه 04 خرداد 1396, 19:16 عصر
سلام ممنون از راهنماییتون

من قسمت کلاسها رو متوجه نمیشم.به هر صورتی هم که مینویسم ارور دارم.ممنون میشم راهنمایی کنید این کلاسها رو چطور باید مرتب کنم؟

Moien Tajik
پنج شنبه 04 خرداد 1396, 23:58 عصر
https://github.com/ASP-NET-Core-Boilerplate/Templates/tree/3184db069e7fcb6458a280eef8ce3bc3498c4223/Source/MVC5/Boilerplate.Web.Mvc5/Sitemap