Я создаю простое действие контроллера MVC, которое принимает некоторые данные json, а затем возвращает true или false.
[AllowCrossSiteJson]
public JsonResult AddPerson(Person person)
{
//do stuff with person object
return Json(true);
}
Я звоню из 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");
}
});
}
Все работает, пока я нахожусь в одном домене, но как только я звоню из другого домена, я сталкиваюсь спроблемы.
На контроллере есть фильтр действий "AllowCrossSiteJson", который устанавливает заголовок "Access-Control-Allow-Origin" в "*", позволяя любому источнику получить доступ к действию контроллера.
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
Однако - я получаю эту ошибку в firebug при вызове между доменами:
ОПЦИИ http://somedomain.com/Ajax/AddPerson?packageId=3 500 (Внутренняя ошибка сервера) XMLHttpRequest не может загрузить http://somedomain.com/Ajax/AddPerson.Поле заголовка запроса Content-Type не разрешено Access-Control-Allow-Headers.
Что здесь не так?
Я просматривал возможныерешения в течение нескольких часов, и, похоже, что-то делать с jquery, используя OPTIONS (не POST, как я ожидал).
Если это действительно проблема, как я могу это исправить?