Generovat XML Sitemap automaticky pomocí cest a regulátory v ASP.NET MVC

hlasů
3

Bylo by možné automaticky generovat XML Sitemap pro vyhledávače iterací trasy a akce regulátorů u applicacion? Pokud jste mi mohl poskytnout s nápadem nebo tak nějak bych to ocenil. Dík.

Položena 02/12/2009 v 21:43
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
3

Vytvořit atribut, jako je tento, a aplikovat je na všechny způsoby, které chcete jako stránek sitemap.xml souboru.

/// <summary>
/// This attribute indicates that a method is an actual page and gives the data for it
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MVCUrlAttribute : ActionFilterAttribute
{
    public string Url { get; private set; }

    public MVCUrlAttribute(string url)
    {
        this.Url = url;
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        string fullyQualifiedUrl = filterContext.HttpContext.Request.Url.GetLeftPart(UriPartial.Authority) + this.Url;
        // We build HTML here because we want the View to be easily able to include it without any conditionals
        // and because the ASP.NET WebForms view engine sometimes doesn’t subsitute <% in certain head items
        filterContext.Controller.ViewData["CanonicalUrl"] = @”<link rel=”"canonical”" href=”"” + fullyQualifiedUrl + ” />”;
        base.OnResultExecuting(filterContext);
    }
}

Nyní pomocí odrazu najít všechny tyto ‚Stránky‘: -

 List<string> allPageUrls = new List<string>();

 // Find all the MVC Routes
 Log.Debug(“*** FINDING ALL MVC ROUTES MARKED FOR INCLUSION IN SITEMAP”);
 var allControllers = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(Controller)));
 Log.DebugFormat(“Found {0} controllers”, allControllers.Count());

 foreach (var controllerType in allControllers)
 {
     var allPublicMethodsOnController = controllerType.GetMethods(BindingFlags.Public | BindingFlags.Instance);
     Log.DebugFormat(“Found {0} public methods on {1}”, allPublicMethodsOnController.Count(), controllerType.Name);

     foreach (var publicMethod in allPublicMethodsOnController)
     {
         var mvcurlattr = publicMethod.GetCustomAttributes(true).OfType<MVCUrlAttribute>().FirstOrDefault();
         if (mvcurlattr != null)
         {
             string url = mvcurlattr.Url;
             Log.Debug(“Found “ + controllerType.Name + “.” + publicMethod.Name + ” <– “ + url);
             allPageUrls.Add(url);
         }
     }
 }

Nyní sestavit soubor sitemap.xml z tohoto seznamu.

Všimněte si také, že ActionFilter klade kanonickou adresu URL do svého pohledu modelu, takže můžete snadno vytvořit příjemný všechny své stránky pro vyhledávače, i když máte duplicitní obsah.

To nemůžete udělat z cest, protože můžete mít pouze jednu trasu pro celou aplikaci {řadič} / {} akci.

Více zde: - http://blog.abodit.com/2010/02/sitemap-xml-asp-net-aspnet-mvc/

Odpovězeno 10/02/2010 v 00:52
zdroj uživatelem

hlasů
1

Mají houser na ASP.NET MVC poskytovatele webu - MvcSiteMap .

Osobně jsem nepoužil to sám, takže nemohu ručit za něj, ale to na jaře na mysli, když jsem četl vaši otázku.

HTHS,
Charles

Odpovězeno 03/12/2009 v 00:08
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more