我是 asp.net mvc 的新手。我在获取 Action 方法中的参数值时遇到了一些麻烦。
我有以下代码:
[HttpPost]
public ActionResult ToggleRecommend(string mode)
{
byte[] requestContent = new byte[Request.ContentLength];
Request.InputStream.Read(requestContent, 0, Request.ContentLength);
string content = Encoding.ASCII.GetString(requestContent);
return EmptyResult();
}
我使用 Ajax 请求访问此方法。该请求具有以下标头:
Accept application/json
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection keep-alive
Content-Length 8
Content-Type text/plain; charset=UTF-8
Host localhost:62718
Referer http://localhost:62718/microsite
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
X-Request JSON
X-Requested-With XMLHttpRequest
这个身体:
mode=off
我的问题是mode
参数 ofToggleRecommend
没有填充来自请求的值 - 相反,它是空的。
请求正确到达我的服务器:content
方法中的变量具有值mode=off
,并且Request.ContentLength
是 8,如预期的那样。此外,Request.RequestType
正如预期的那样,是“POST”。但是,Request.Form
是空的:它没有键或值。(我不知道这是否相关)。
这里出了什么问题?如何让我的mode
参数值进入我的操作方法?
问题一定与post有关:如果我删除HttpPost
属性并向Url发出请求,localhost:62718/microsite/toggleRecommend/?mode=off
则mode
参数会off
按预期获取值。
编辑:
该请求是使用 Mootools 库使用 javascript 发出的。我在下面包含了这部分代码:
var req = new Request.JSON({ method: "post",
url: "/microsite/toggleRecommend/" ,
autoCancel: true, urlEncoded: false, secure: false,
onFailure: recommendFail, onException: recommendFail,
onSuccess: recommendSuccess
});
req.send({ data: { mode: 'on'} });
使用萤火虫,我可以看到请求的确切格式(看起来很好),所以希望 javascript 代码的细节无关紧要。