【发布时间】:2013-10-02 07:58:14
【问题描述】:
为了传递电子邮件地址,我使用 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) { ... }
Fiddler 是这么说的:
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 参数总是为空?
【问题讨论】:
-
这对我来说看起来不错,您是否测试过使用 Fiddler 构建请求并手动发布?最有可能的问题是 JSON 数据,但从这里我看不出它有什么问题。您也可以尝试删除
[FromBody]属性。 -
当我取出
[FromBody]时,我的方法甚至没有被调用。这是路由:config.Routes.MapHttpRoute( name: "UserByEmailRoute", routeTemplate: "api/Search/UserByEmail", defaults: new { controller = "Search", action = "UserByEmail" } ); -
这可能是有道理的,它会期望你在没有那个的情况下发布到
api/Search/UserByEmail/emailAddress- 只是试图排除可能导致问题的事情:) 在 Fiddler ,如果您将=mail@example.com作为正文发布,它会起作用吗? -
是的,这行得通。谢谢。
标签: asp.net jquery asp.net-mvc-4