Diferencia de enrutamiento Asp.Net MVC en www.Mysite.com/Employee y www.Mysite.com/Employee/ mientras usa JqGrid
-
06-07-2019 - |
Pregunta
Estoy usando ASP.NEt MVC para uno de mis proyectos. En esto tengo un controlador de empleado que se puede llamar por www.Mysite.com/Employee/ url.
También he usado JqGrid que usa followng para obtener datos
url: " GetGridData "
Mientras probaba lo mismo encontré que
-
Si escribo www.Mysite.com/Employee/ en el navegador, se realiza una llamada a
www.Mysite.com/Employee/GetGridData
-
Si escribo www.Mysite.com/Employee en el navegador, se realiza una llamada a
www.Mysite.com/GetGridData
Nota: la falta / al final en la segunda llamada.
Cómo corregir esto, ya que es probable que el usuario final pueda escribir cualquiera de estas URL en el navegador.
Solución
Echaría un vistazo a cómo le está pidiendo a JqGrid que haga su llamada al servicio web, porque no sabrá nada sobre el motor de enrutamiento de MVC de manera predeterminada, y todo esto está sucediendo en el lado del cliente.
Salir de MVC por un minuto, si tengo una página:
ejemplo.com/página1.aspx
Y tiene un enlace relativo a otra página allí:
<a href="page2.aspx">Click here</a>
El navegador buscará page2.aspx en el mismo nivel que page1.aspx, es decir,
ejemplo.com/página2.aspx
Si muevo la página1 a una nueva carpeta:
example.com/NewFolder/page1.aspx
El navegador pedirá
example.com/NewFolder/page2.aspx
cuando un usuario hace clic en el enlace.
Lo mismo le sucede a su llamada GetGridData: el navegador web los realiza a su servidor en función de la información que tiene disponible.
Entonces, si su página responde:
ejemplo.com/empleado
Y solicita una solicitud relativa para:
GetGridData
El navegador enviará esa solicitud al mismo nivel en el que parece estar el empleado:
ejemplo.com/GetGriddata
Que luego falla porque el motor de enrutamiento no puede encontrar una ruta para esa solicitud.
Debería considerar generar la URL para la llamada GetGridData dinámicamente a través del sistema de enrutamiento, lo que garantizará que se construya como:
url: "/Employee/GetGridData"
Edición final para agregar
Olvidé mencionar que probablemente debería usar el Métodos de acción UrlHelper para esto:
url: <%=Url.Action("GetGridData")%>
Esto generará una ruta al método GetGridData en el controlador actual. Si necesita acceder a un controlador diferente o pasar algunos valores, hay sobrecargas para ayudarlo.
Otros consejos
Intenta depurar tu ruta: Phil Haack's: ASP.NET Routing Debugger