【问题标题】:WebAPI - Ajax POST Json call (Cross-domain) - Model-binder not workingWebAPI - Ajax POST Json 调用(跨域) - 模型绑定器不起作用
【发布时间】:2014-01-21 18:02:59
【问题描述】:

在客户端:

var data = {Title":"Some Title","Description":"Something"} ;

$.support.cors = true;

$.ajax({
    type: 'POST',
    dataType: 'json',
    url: apiUrl + "/Save",
    data: data,
    contentType: 'application/x-www-form-urlencoded',
    success: function (returnedData) {},
    error: function (xhr, ajaxOptions, thrownError) {},
    processData: false,
    async: false
});

在服务器端:

    [HttpPost]
    public ActionResult Save(DataModel data)
    {
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
        Response.AppendHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

        return null;
    }

这是数据模型:

public class DataModel
{
    public string Title { get; set; }
    public string Description { get; set; }
}

一切正常。但是,当它向“保存”控制器操作发出 POST 请求时,模型上的属性始终为空,并且不会从客户端获取值。

请注意,这是对我网站“子域”的跨域请求(即从 example.com 调用 api.example.com)

我错过了什么?

提前谢谢大家!

【问题讨论】:

  • 其他类似的ajax请求是否有效?
  • 谢谢@KevinB,我该怎么做呢?顺便说一句,这将在 Phonegap 中运行,所以我相信只要它在 WebKit 上运行就可以了。
  • 是的,在phonegap中你确实需要那个标志iirc。
  • 啊,我看到了什么。 processData 设置为falsedata 是一个对象,因此不会发送。您应该将 processData 设置为 true,or(not and!) 将 contentType 更改为 json 并将对象解析为 json(取决于您的 api 的要求)
  • 我已尝试将 processData 设为 true;同样的问题。当我将 contentType 切换为“application/json”时,Chrome 中出现“No 'Access-Control-Allow-Origin' header is present”错误。

标签: jquery json cors asp.net-web-api


【解决方案1】:

首先,使用以下选项更改您的 ajax 请求:

    contentType : 'application/json', dataType: 'json'.

之后,将此控制器方法添加到您的控制器中:

    [HttpOptions]
    public ActionResult Save()
    {
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
        Response.AppendHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

        return null;
    }

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多