3

为了传递电子邮件地址,我使用 ajax 和 POST 作为类型。

$.ajax({
    url: "api/Search/UserByEmail",
    type: "POST",
    data: JSON.stringify({ emailAddress: userEmail }),
    contentType: "application/json;charset=utf-8",
    dataType: "json",
    success: function (data) { ... }
});

控制器:

[HttpPost]
public IEnumerable<Object> UserByEmail([FromBody] string emailAddress) { ... }

这就是提琴手所说的:

POST http://localhost:52498/api/Search/UserByEmail HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json;charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:52498/#
Accept-Language: de-DE
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Host: localhost:52498
Content-Length: 35
DNT: 1
Connection: Keep-Alive
Pragma: no-cache

{"emailAddress":"mail@example.com"}

为什么 emailAddress 参数总是为空?

4

3 回答 3

1
 // JS - jQuery 
 $.ajax({
        url: "/Home/UserByEmail",
        type: "POST",
        data: { emailAddress: "joe@gmail.com" },
        dataType: "json",
        success: function (data) { if(data != null) { alert(data.toString()); } }
    });



  [Serializable]
  public class EmailFormModel {
     public string emailAddress { get; set; }
  }

    [HttpPost]
    public JsonResult UserByEmail(EmailFormModel emailFormModel)
    {
        bool ok = emailFormModel.emailAddress != null;
        return Json(new { ok }); 
    }

使用 formModel 并在类上放置一个可序列化的属性,它会自动将您的 javascript 序列化为 C# 等效项。而且你不需要使用 Json-stringify。

注意从 ajax 方法中删除了 // contentType: "application/json;charset=utf-8", 声明。我实际上从未使用过它。

于 2013-10-02T08:03:55.267 回答
0

我认为这JSON.stringify可能是你的问题。MVC 将为您处理参数的序列化/反序列化,将其更改为:

data: { emailAddress: userEmail }
于 2013-10-02T08:03:09.150 回答
0

修改原始ajax调用中的data属性为

data: '"' + userEmail + '"',

让其中一些 Web API 调用正常工作有时会有点棘手

于 2015-01-08T18:47:49.673 回答