maartenba / MvcSiteMapProvider

An ASP.NET MVC SiteMapProvider implementation for the ASP.NET MVC framework.
Microsoft Public License
539 stars 218 forks source link

Error with 'PreservedRouteParameters' - v4.6.18 #382

Closed aetamborelli closed 9 years ago

aetamborelli commented 9 years ago

Hello. In some cases, randomly displays the following error: The node with key '_Home_Index_GET_HomeSolucionInformatica_index_GET_Activos__DataCenter_index_GET_Activos InformáticosSolucionInformatica_Edit_GETSoluciones Informáticas' and title 'Soluciones Informáticas' has 'id' configured in both RouteValues and PreservedRouteParameters, which is not allowed. PreservedRouteParameters copies the route value from the current HTTP request which would overwrite your configured RouteValue in every case. Either remove 'id' from PreservedRouteParameters or as a configured RouteValue. Alternatively, if you are configuring the node in XML and intend to use 'id' as a custom attribute, use the 'MvcSiteMapProvider_AttributesToIgnore' configuration setting to ensure 'id' is not automatically added to RouteValues. If using external DI, this setting is injected into the constructor of 'SiteMapXmlReservedAttributeNameProvider'.

The sitemap is configured as follows

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
          xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

  <mvcSiteMapNode title="Home" controller="Home" action="Index" >

    <mvcSiteMapNode title="Activos" controller="SolucionInformatica" action="index" roles="Inventario_Activos" visibility="SiteMapPathHelper" >

      <mvcSiteMapNode title="Activos Informáticos" controller="DataCenter" action="index" >

        <mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="List" />
        <mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="New" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="Edit" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="Display" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="Search" visibility="SiteMapPathHelper,!*" />

        <mvcSiteMapNode title="Instalaciones" controller="DataCenter" action="List"  />
        <mvcSiteMapNode title="Instalaciones" controller="DataCenter" action="New" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Instalaciones" controller="DataCenter" action="Edit" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Instalaciones" controller="DataCenter" action="Display" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />
        <mvcSiteMapNode title="Instalaciones" controller="DataCenter" action="Search" visibility="SiteMapPathHelper,!*"  />

If you do not use the 'PreservedRouteParameters' does not give the error, but does not the breadcrumb.

I am using version 4.6.18.0. Thanks in advance

NightOwl888 commented 9 years ago

I don't see any problem with your node configuration. Could you post your routes?

The preservedRouteParameters logic was changed slightly in 4.6.18. Could you see if this still happens with 4.6.17?

aetamborelli commented 9 years ago

In the 4.6.17 also happens. The only routing is

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }
NightOwl888 commented 9 years ago

You need to change the route as follows:

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }  // Parameter defaults
            );
        }

Setting a default value to "" is not the same as setting it to UrlParameter.Optional. The former adds a key id with a value of "" to the MVC RouteValueDictionary, the latter does not add this entry.

That said, I don't think it will solve your issue.

Are you setting the "id" RouteValue in your SolucionInformatica.Edit action method or anywhere else in your request, like this (you shouldn't be)?

MvcSiteMapProvider.Sitemaps.Current.CurrentNode.RouteValues.Add("id", 1234);

If not, please create a small demo project showing how to reproduce the error and make it available for download or post it on GitHub.

aetamborelli commented 9 years ago

It's very difficult to test (and also to create a demo Project) because error is aleatory. We don't understand the logic behind it. I'll change my route, see what it happens, and keep you informed about it. Thanks.

aetamborelli commented 9 years ago

We also noticed versión 4.6 is much slower than the old 2.0 Any idea of why?

NightOwl888 commented 9 years ago

We have only had a handful of complaints about performance, and other than the known scalability limitations of having a limit of 10s of thousands of nodes, the rest all turned out to be misconfigured in some way. Fixing the configuration improved the performance in every other case.

I have never compared the performance with 2.0, but there were several performance improvements made over the old 3.6 version, and it is definitely much faster.

As for the error, it means that this node:

<mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="Edit" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />

has the "id" key in both the PreservedRouteParameters property and the RouteValues property of SiteMapNode when the SiteMap is loaded. Only one of these should be set.

Clearly, your XML configuration is not setting the "id" of RouteValues, so you have a misconfiguration somewhere else.

Based on your comment about performance and issue #236, my next guess is that you have turned caching off, which would explain both problems.

<appSettings>
    <add key="MvcSiteMapProvider_CacheDuration" value="0" />
</appSettings>

Make sure you set the cache duration to something greater than 0. The default is 5 (minutes).

<appSettings>
    <add key="MvcSiteMapProvider_CacheDuration" value="5" />
</appSettings>

If using external DI, the cache duration is set at the top of the DI module:

TimeSpan absoluteCacheExpiration = TimeSpan.FromMinutes(5);

Without caching, the performance will suffer. Also, you will get this exception because the SiteMap will load multiple times per request (once for each HTML helper) and the request caching of RouteValues will cause this collision the second time the "id" value is copied from the current ControllerContext into the node's RouteValues. There is a workaround for the problem, but it requires that you use external DI in order to apply it, and there is also a fix coming for it in the next minor version.

However, unless your application is doing its own caching of the SiteMap data, there is no valid reason for turning off caching because it is an essential part of the design. Reloading the SiteMap can be done in 3 ways:

  1. Applying the [SiteMapCacheRelease] attribute to the HttpPost portion of the actions that update the node data.
  2. Calling the static MvcSiteMapProvider.SiteMaps.ReleaseSiteMap() method.
  3. Implementing your own ICacheDepedency.
aetamborelli commented 9 years ago

Thank you very much for all the advice and suggestions and for the prompt reply. Let's try with all these changes in production and then notify you as we were.

Regards

aetamborelli commented 9 years ago

Returning to the theme of the slow, returned to the version 2.0.0.0 and is notable change in performance. Our sitemap is as follows (there are definite about 350 nodes and use dynamic nodes):

<?xml version="1.0" encoding="utf-8" ?> <mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

``` ```

What is happening? From version 2.0.0.0 did not find much documentation on dynamicos nodes. Where can we find information?

thank you very much

NightOwl888 commented 9 years ago

As far as I am aware, there is no documentation for the 2.0 version.

I suggest you upgrade to 4.6.18 because at least I can support that version. We just need to find the problem with your configuration, and the performance issues will go away. I don't think there are any problems with the configuration of your nodes.

However, as I have already stated, it sounds like you have set the "MvcSiteMapProvider_CacheDuration" setting to 0. This will definitely cause performance issues and would explain the other error you are getting. You should set it for at least 5 minutes.

You might also have issues with the configuration you haven't posted. For example, improperly configured DynamicNodeProviders could lead to performance issues. Also, if you are using Security Trimming and have lots of code that runs in your controller constructors or inside of a custom AuthorizeAttribute you will have performance problems.

Could you post your root web.config and your 2 dynamic node providers, StoreDetailsDynamicNodeProvider and ReporteEventosDynamicNodeProvider?

aetamborelli commented 9 years ago

Web.config: <?xml version="1.0" encoding="utf-8"?>

AppSettings:

DynamicNodes

public class StoreDetailsDynamicNodeProvider : MvcSiteMapProvider.DynamicNodeProviderBase
{
    public override IEnumerable<MvcSiteMapProvider.DynamicNode> GetDynamicNodeCollection(MvcSiteMapProvider.ISiteMapNode node)
    {

        #region Canales Electrónicos

        // Si esta activada la feature de canales electronicos muestra el menu en tacnologico
        if (ViaInfo.Core.Features.FeatureEnabled(ViaInfo.Core.Features.FeatureKey.CanalesElectronicos))
        {
            MvcSiteMapProvider.DynamicNode dynamicNode = new MvcSiteMapProvider.DynamicNode();

            // Nodo Padre
            dynamicNode.Title = "Canales Electrónicos";
            dynamicNode.ParentKey = "Tecnológico";
            dynamicNode.Controller = "EscenarioCumplimiento";
            dynamicNode.Action = "Index";
            dynamicNode.Roles = new List<string> { "CanalesElectronicos" };
            dynamicNode.Key = "Canales_Electrónicos";
            yield return dynamicNode;

            #region Análisis de Cumplimiento (GAP)

            dynamicNode.Title = "Análisis de Cumplimiento (GAP)";
            dynamicNode.ParentKey = "Canales_Electrónicos";
            dynamicNode.Controller = "EscenarioCumplimiento";
            dynamicNode.Action = "Search";
            dynamicNode.Key = "Canales_Electrónicos_Cumplimiento";
            yield return dynamicNode;

            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Análisis de Cumplimiento (GAP)";
            dynamicNode.Controller = "EscenarioCumplimiento";
            dynamicNode.Action = "List";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            dynamicNode.Action = "Display";
            yield return dynamicNode;

            #endregion

            #region  Requisitos

            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Requisitos";
            dynamicNode.ParentKey = "Canales_Electrónicos";
            dynamicNode.Controller = "Requisitos";
            dynamicNode.Action = "Search";
            dynamicNode.Key = "Canales_Electrónicos_Requisitos";
            yield return dynamicNode;

            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Requisitos";
            dynamicNode.Controller = "Requisitos";
            dynamicNode.Action = "Search";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            dynamicNode.Action = "List";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "New";
            yield return dynamicNode;

            #endregion

            #region Escenarios

            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Escenarios";
            dynamicNode.ParentKey = "Canales_Electrónicos";
            dynamicNode.Controller = "Escenarios";
            dynamicNode.Action = "Search";
            dynamicNode.Key = "Canales_Electrónicos_Escenarios";
            yield return dynamicNode;

            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Escenarios";
            dynamicNode.Controller = "Escenarios";
            dynamicNode.Action = "List";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;
            dynamicNode.Action = "New";
            yield return dynamicNode;

            #endregion

            #region Tablas

            // Agrega tablas de Canales Electronicos en Tecnológico / Tablas
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Tablas";
            dynamicNode.ParentKey = "Canales_Electrónicos";
            dynamicNode.Controller = "TipoCriticidad";
            dynamicNode.Action = "List";
            dynamicNode.Key = "Canales_Electrónicos_Tablas";
            yield return dynamicNode;

            dynamicNode = new MvcSiteMapProvider.DynamicNode();

            // Tipo Criticidad
            dynamicNode.Title = "Tipos de Criticidad";
            dynamicNode.ParentKey = "Canales_Electrónicos_Tablas";
            dynamicNode.Controller = "TipoCriticidad";
            dynamicNode.Action = "List";
            yield return dynamicNode;

            dynamicNode.Action = "New";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;

            // Categoria de Escenarios
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Categoria de Escenarios";
            dynamicNode.ParentKey = "Canales_Electrónicos_Tablas";
            dynamicNode.Controller = "CategoriaEscenarios";
            dynamicNode.Action = "List";
            yield return dynamicNode;

            dynamicNode.Action = "New";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;

            // Categoria de Requisitos
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Categoria de Requisitos";
            dynamicNode.ParentKey = "Canales_Electrónicos_Tablas";
            dynamicNode.Controller = "CategoriaRequisitos";
            dynamicNode.Action = "List";
            yield return dynamicNode;

            dynamicNode.Action = "New";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;

            // Criticidad de Escenarios
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Criticidad de Escenarios";
            dynamicNode.ParentKey = "Canales_Electrónicos_Tablas";
            dynamicNode.Controller = "CriticidadEscenarios";
            dynamicNode.Action = "List";
            yield return dynamicNode;

            dynamicNode.Action = "New";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;

            // Niveles de Cumplimiento
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Niveles de Cumplimiento";
            dynamicNode.ParentKey = "Canales_Electrónicos_Tablas";
            dynamicNode.Controller = "NivelCumplimiento";
            dynamicNode.Action = "List";
            yield return dynamicNode;

            dynamicNode.Action = "New";
            dynamicNode.PreservedRouteParameters.Add("id");
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode.Action = "Edit";
            yield return dynamicNode;
            dynamicNode.Action = "Display";
            yield return dynamicNode;

            #endregion

        }

        #endregion

    }
}

public class ReporteEventosDynamicNodeProvider : MvcSiteMapProvider.DynamicNodeProviderBase
{
    public override IEnumerable<MvcSiteMapProvider.DynamicNode> GetDynamicNodeCollection(MvcSiteMapProvider.ISiteMapNode node)
    {
        string ModoReporteEventos = ViaRiesgos.Extensions.UtilExtensions.obtenerValorAppSettings("ModoReporteEventos");
        MvcSiteMapProvider.DynamicNode dynamicNode = new MvcSiteMapProvider.DynamicNode();

        dynamicNode.Title = "Generación de Interfaces";
        dynamicNode.ParentKey = "ReporteEventos";
        dynamicNode.Controller = "ReportesEventosRO";
        dynamicNode.Roles = new List<string> { "ReportesEventosAdmin" };

        if (ModoReporteEventos == "UNIDATO")
        {
            dynamicNode.Action = "GeneracionInterfaces";
            yield return dynamicNode;

            // Tablas varias
            // Integrantes
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Integrantes";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "Integrantes";
            dynamicNode.Action = "List";
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Integrantes";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "Integrantes";
            dynamicNode.Action = "New";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Integrantes";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "Integrantes";
            dynamicNode.Action = "Edit";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Integrantes";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "Integrantes";
            dynamicNode.Action = "Display";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            // Coordinadores R.O.
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Coordinadores R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "CoordinadoresRO";
            dynamicNode.Action = "List";
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Coordinadores R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "CoordinadoresRO";
            dynamicNode.Action = "New";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Coordinadores R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "CoordinadoresRO";
            dynamicNode.Action = "Edit";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Coordinadores R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "CoordinadoresRO";
            dynamicNode.Action = "Display";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            // Coordinadores R.O.
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Analistas R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AnalistasRO";
            dynamicNode.Action = "List";
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Analistas R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AnalistasRO";
            dynamicNode.Action = "New";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Analistas R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AnalistasRO";
            dynamicNode.Action = "Edit";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Analistas R.O.";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AnalistasRO";
            dynamicNode.Action = "Display";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

            // Áreas BTF
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Áreas BTF";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AreasBTF";
            dynamicNode.Action = "List";
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Áreas BTF";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AreasBTF";
            dynamicNode.Action = "New";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Áreas BTF";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AreasBTF";
            dynamicNode.Action = "Edit";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;
            dynamicNode = new MvcSiteMapProvider.DynamicNode();
            dynamicNode.Title = "Áreas BTF";
            dynamicNode.ParentKey = "ReporteEventos_Tablas";
            dynamicNode.Controller = "AreasBTF";
            dynamicNode.Action = "Display";
            dynamicNode.Attributes.Add("visibility", "SiteMapPathHelper,!*");
            yield return dynamicNode;

        }
        else if (ModoReporteEventos == "BCRA")
        {
            dynamicNode.Action = "GeneracionInterfacesBCRA";
            yield return dynamicNode;
        }

    }
}

THANKS!!!

aetamborelli commented 9 years ago

Web.config and AppSetting not showing. attach a image of this appsettings webconfig

NightOwl888 commented 9 years ago

Nothing unusual is jumping out of your configuration.

Does performance improve by a large margin if you disable security trimming as a test?

You might also try commenting groups of nodes in blocks to see if you can find the area that is causing the performance issue. The "divide and conquer" approach.

You need to narrow this down to a particular node or a particular feature that is causing performance issues.

Are you still receiving the original error?

If so, does your project use [SiteMapPreserveRouteDataAttribute]? Do note that it is now obsolete and you should not be using it anymore. If this attribute is on your action method that corresponds to the node

<mvcSiteMapNode title="Soluciones Informáticas" controller="SolucionInformatica" action="Edit" preservedRouteParameters="id" visibility="SiteMapPathHelper,!*" />

It could be causing the error.

NightOwl888 commented 9 years ago

Were you able to resolve this issue?

NightOwl888 commented 9 years ago

Closing as there has been no activity on this for several months. Feel free to reopen this issue if it is still unresolved.