the solucionado servidor resource requested not net mvc found error encontrado directorio asp archivo asp.net-mvc jquery deployment iis-7.5

asp.net mvc - solucionado - La llamada AJAX devuelve 404(local) en IIS 7.5 pero funciona igual en otros IIS



http error 404. the requested resource is not found. solucionado (4)

Estoy teniendo las llamadas AJAX a mi controlador en mi aplicación MVC

Controller/FunctionName $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", url: ''/Controller/FunctionName'', . . . )};

Estoy utilizando MVC 4 y haciendo uso de la función JQUERY Ajax como se muestra en el código anterior. Funciona totalmente bien cuando corro desde Visual studio.

Depolié esto a la máquina del servidor y, como era de esperar, funciona bien . No se han encontrado problemas en las llamadas AJAX.

Ahora estoy intentando implementar esto en mi máquina local IIS, que es la misma que la versión de mi servidor (IIS 7.5) pero obtengo 404 para todas las llamadas ajax en firebug.

Verifiqué la construcción e incluso señalé mi carpeta web y sigo buscando lo que salió mal.

Funciona en otro IIS, por lo que no será un problema de resolución de URL como mis gues. Me estoy perdiendo alguna configuración o alguna idea oportuna para solucionar este problema sería genial.

Gracias


Eso es normal. Has codificado la url a la acción de tu controlador:

url: ''/Controller/FunctionName'',

Si implementa su aplicación en un directorio virtual en IIS, la url correcta debe ser:

url: ''/YourAppName/Controller/FunctionName'',

Esa es la razón por la que nunca deberías usar URL de código duro en una aplicación MVC de ASP.NET, pero SIEMPRE debes usar ayudantes de URL para generarla:

url: ''@Url.Action("FunctionName", "Controller")'',

y si esta llamada AJAX se encuentra en un archivo javascript separado en el que no puede usar ayudantes del lado del servidor, entonces podría leer esta URL de algún elemento DOM que usted está identificando con AJAX.

Por ejemplo, supongamos que tienes un ancla:

@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })

que usted AJAXify:

$(''#myLink'').click(function() { $.ajax({ url: this.href, contentType: ''application/json; charset=utf-8'', type: ''GET'', . . . )}; return false; });

Observe cómo estamos leyendo la URL del elemento DOM que fue generado por un ayudante.

Conclusión y 2 reglas generales:

  • NUNCA NUNCA codifique una URL en una aplicación MVC de ASP.NET
  • ABSOLUTAMENTE SIEMPRE use ayudantes de url cuando trate con urls en una aplicación MVC de ASP.NET

Lo que encontré en mi configuración de IIS7.5 es que el ''Asignación de manejadores'' tiene un recurso llamado ''OPTIONSVerbHandler'' no está configurado en el orden correcto, por lo tanto, devuélvalo como Desconocido.

Esto me funcionó donde mi ajax localhost estaba llamando a mi servidor de red, que tiene un nombre diferente, que no debería plantearme un problema de CORS, pero sí lo hizo y esta fue mi solución.

Abra IIS y haga clic en el nombre de su servidor en el panel izquierdo. En el panel derecho, haga doble clic en ''Asignaciones de controlador'' en el panel central. En el panel derecho, seleccione ''Ver lista ordenada''. Desde allí encuentra ''OPTIONSVerbHandler'' y ''svc-ISAPI-4.0_32bit'', mueve ''OPTIONSVerbHandler'' hasta que esté por encima de ''svc-ISAPI-4.0_32bit''.

Asegúrese de que su ''manejador'' dentro de su llamada ajax no tenga ''Access-Control-Allow-Origin'' en él.


Puedes usar doble punto en la url:

$.ajax({ url: ''../ControllerName/ActionName'', ....... });


Solo un complemento de la respuesta de Darin de que si "la llamada AJAX se encuentra en un archivo javascript separado donde no puede usar ayudantes del lado del servidor", use un campo oculto para almacenar el punto final de la URL en la vista:

@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))

y lee ese campo oculto en tu js:

url: $("#URLEndpointName").val(),