solicitud routeconfig route que ninguna net mvc enrutamiento encontró controlador con coincida asp acción asp.net iis routing asp.net-routing

routeconfig - Enrutamiento ASP.NET: subsegmento literal entre tokens y valores de ruta con un carácter del subsegmento literal



route config c# (3)

La razón por la que estoy preguntando es porque IIS protege ciertas carpetas ASP.NET, como Bin, App_Data, App_Code, etc. Incluso si la URL no se asigna a una carpeta real del sistema de archivos, IIS rechaza una URL con un segmento de ruta igual a uno de los nombres mencionados

Esto significa que no puedo tener una ruta como esta:

{controller}/{action}/{id}

... donde id puede ser cualquier cadena, por ejemplo

Catalog/Product/Bin

Entonces, en lugar de deshabilitar esta medida de seguridad, estoy dispuesto a cambiar la ruta, usando un sufijo antes de la identificación, como estos:

{controller}/{action}_{id} // e.g. Catalog/Product_Bin {controller}/{action}/_{id} // e.g. Catalog/Product/_Bin

Pero estas rutas no funcionarán si el ID contiene el nuevo delímetro, _ en este caso, por ejemplo

// These URL won''t work (I get 404 response) Catalog/Product_Bin_ Catalog/Product/_Bin_ Catalog/Product/__Bin

¿Por qué? No lo sé, parece un error para mí. ¿Cómo puedo hacer que estas rutas funcionen, donde id puede ser cualquier cadena?


Puede usar caracteres que no están permitidos para un directorio o nombre de archivo como: *,?,:, ", <,>, |.


Con ASP.NET MVC, si miras la fuente, tienen un valor codificado para el separador de ruta (/) y, para mi conocimiento, no se puede modificar.


Ok, tengo una respuesta definitiva. Sí, esto es un error. Sin embargo, en este punto lamento decir que no tenemos planes de solucionarlo por un par de razones:

  • Es un cambio radical y podría ser muy difícil notarlo.
  • Hay una solución fácil.

Lo que puedes hacer es cambiar la URL para que no tenga el guión bajo:

{controller}/{action}/_{id}

A continuación, agregue una restricción de ruta que requiera que el parámetro ID comience con un carácter de subrayado.

Luego, dentro de su método de acción, corta el prefijo del guión bajo del parámetro id. Incluso podría escribir un filtro de acción para hacer esto por usted si quisiera. Lo siento por los inconvenientes ocasionados.