, sitemap.xml.
1
2
3
4 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
5 public class MVCUrlAttribute : ActionFilterAttribute
6 {
7 public string Url { get; private set; }
8
9 public MVCUrlAttribute(string url)
10 {
11 this.Url = url;
12 }
13
14 public override void OnResultExecuting(ResultExecutingContext filterContext)
15 {
16 string fullyQualifiedUrl = filterContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority) + this.Url;
17
18
19 filterContext.Controller.ViewData["CanonicalUrl"] = @"<link rel=""canonical"" href=""" + fullyQualifiedUrl + " />";
20 base.OnResultExecuting(filterContext);
21 }
22 }
, : -
1 List<string> allPageUrls = new List<string>();
2
3
4 Log.Debug("*** FINDING ALL MVC ROUTES MARKED FOR INCLUSION IN SITEMAP");
5 var allControllers = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(Controller)));
6 Log.DebugFormat("Found {0} controllers", allControllers.Count());
7
8 foreach (var controllerType in allControllers)
9 {
10 var allPublicMethodsOnController = controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance);
11 Log.DebugFormat("Found {0} public methods on {1}", allPublicMethodsOnController.Count(), controllerType.Name);
12
13 foreach (var publicMethod in allPublicMethodsOnController)
14 {
15 var mvcurlattr = publicMethod.GetCustomAttributes(true).OfType<MVCUrlAttribute>().FirstOrDefault();
16 if (mvcurlattr != null)
17 {
18 string url = mvcurlattr.Url;
19 Log.Debug("Found " + controllerType.Name + "." + publicMethod.Name + " <– " + url);
20 allPageUrls.Add(url);
21 }
22 }
23 }
sitemap.xml .
, ActionFilter URL- , , .
, {controller}/{action}.
: - http://blog.abodit.com/2010/02/sitemap-xml-asp-net-aspnet-mvc/