Creo una acción simple de controlador MVC, que toma algunos datos json - luego devuelve verdadero o falso.Publicación de Ajax json al controlador en dominios, "no permitido por" Access-Control-Allow-Headers
[AllowCrossSiteJson]
public JsonResult AddPerson(Person person)
{
//do stuff with person object
return Json(true);
}
me llaman desde javascript:
function saveData(person) {
var json = $.toJSON(person); //converts person object to json
$.ajax({
url: "http://somedomain.com/Ajax/AddPerson",
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert("ok");
}
});
}
Todo funciona siempre y cuando estoy en el mismo dominio, pero tan pronto como lo llamo desde otro dominio, me encuentro con problemas.
En el controlador hay un filtro de acción "AllowCrossSiteJson" que establece el encabezado "Access-Control-Allow-Origin" en "*", lo que permite que cualquier origen acceda a la acción del controlador.
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
Sin embargo - y luego me sale este error en Firebug, al llamar a través de dominios:
OPCIONES http://somedomain.com/Ajax/AddPerson?packageId=3 500 (Internal Server Error) XMLHttpRequest no puede cargar http://somedomain.com/Ajax/AddPerson. Campo de encabezado de solicitud Content-Type no está permitido por Access-Control-Allow-Headers.
¿Qué pasa aquí?
He estado buscando posibles soluciones durante horas, y parece ser algo relacionado con jquery usando OPTIONS (no POST como era de esperar).
Si ese es el problema, ¿cómo puedo solucionarlo?
I te amo y quiero tener tus bebés. – Kjensen
¿Esto no funciona solo con las solicitudes de obtención? –
Sí, la implementación jQuery de JSONP solo funciona con solicitudes GET. –