Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 21428|Respuesta: 1

[WebAPI] Problemas y soluciones para llamadas AJAX entre dominios a ASP.NET servicios MVC o WebAPI

[Copiar enlace]
Publicado en 1/12/2015 15:20:20 | | | |
Descripción del problema
Cuando una llamada multidominio ASP.NET MVC o un servicio escrito ASP.NET Web API, se vuelve inaccesible.
Método de reproducción
  • Usa una plantilla para crear un proyecto de API web ASP.NET sencillo, depura para asegurarte de que funciona
  • Crea otro proyecto con solo una página HTML y haz una llamada AJAX
  • Abre esta página en tu navegador y encontrarás el siguiente error (405: Método No Permitido)

    Nota: La misma situación ocurre en ASP.NET MVC. En algunos casos, MVC también puede usarse directamente para desarrollar servicios, lo que tiene sus propias ventajas y desventajas en comparación con WebAPI. A continuación se muestra un ejemplo de un servicio desarrollado usando MVC


Análisis de la causa
La razón fundamental del problema entre dominios es que el navegador tiene pocos privilegios en ambas solicitudes y normalmente solo permite llamadas a recursos en el dominio local, a menos que el servidor objetivo le indique explícitamente que se permiten llamadas entre dominios.
Por lo tanto, aunque el problema cruzado de dominio se debe al comportamiento del navegador, la solución está en el lado del servidor. Porque no es posible exigir a todos los clientes que reduzcan la seguridad.

solución
Para ASP.NET tipos de proyectos de MVC y ASP.NET Web API, investigué y determiné que el siguiente escenario es factible.
Para ASP.NET MVC, solo necesitas añadir el siguiente contenido a web.config


Para ASP.NET APIs web, además de los ajustes anteriores, es necesario añadir un diseño especial, que consiste en añadir un método OPTIONS para cada controlador de API, pero sin devolver nada.
Opciones de cadenas públicas ()
{
return null; Respuesta HTTP 200 con cuerpo vacío
}

Nota: Esta función también se puede hacer con algo de investigación, y puede ser mejor diseñarla como un filtro.





Anterior:Cita oficial del cuaderno de Lenovo el 1 de diciembre
Próximo:Implementa un servicio Http sencillo con HttpListener
 Propietario| Publicado en 1/12/2015 15:39:52 |
  1. <system.webServer>

  2. <httpProtocol>

  3. <customHeaders>

  4. <add name="Access-Control-Allow-Origin" value="*" />

  5. <add name="Access-Control-Allow-Headers" value="Content-Type" />

  6. <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

  7. </customHeaders>

  8. </httpProtocol>

  9. <handlers>

  10. <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

  11. <remove name="OPTIONSVerbHandler" />

  12. <remove name="TRACEVerbHandler" />

  13. <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

  14. </handlers>

  15. </system.webServer>
Copiar código


Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com