Hoy me encontré con un problema que aun no me había sucedido nunca, y por suerte tuve fácil y rápida solución. Cree un widget en JAVASCRIPT para que buscara los códigos postal y que devolviera el valor del código postal.
Cuando lo quise utilizar desde una web externa a mi servidor, resulta que no se ejecutaba. EL problema estaba en la llamada al servicio web (webservice), que me denegaba el acceso. La solución, como siempre, habilitar el acceso en el webconfig para utilizar URLs que no sean del mismo servidor.
Esto es porque la consultar con AJAX solicita el webservice desde un encabezado diferente, y este controla el origen. Ya que esta haciendo una solicitud cruzada (CORS)
Access-Control-Allow-Origin
Hay que especificar en el webconfig que permita las solicitudes cruzadas dela siguiente forma:
< system.webServer>
< httpProtocol>
< customHeaders>
< add name="Access-Control-Allow-Headers" value="accept, content-type" />
< add name="Access-Control-Allow-Origin" value="http://localhost" />
< add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
< /customHeaders>
< /httpProtocol>
< /system.webServer>
Si no te funciona haciendo en el webconfig, a mi me funciono, tambien tienes la posibilidad de especificarlo en el fichero global.asax de la siguiente forma:
void Application_BeginRequest(object sender, EventArgs e)
{
var context = HttpContext.Current;
var response = context.Response;
// enable CORS
response.AddHeader("Access-Control-Allow-Origin", "*");
if (context.Request.HttpMethod == "OPTIONS")
{
response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
response.End();
}
}
Happy codding
Articulo Con la Solucion
#errores #IIS #AJAX #CSHARP #ASP #seguridad