我是新来的asp.net mvc。我在Action方法中获取参数的值时遇到了一些麻烦。将post参数传递给asp.net mvc中的动作方法?
我有以下代码:
[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
我的问题是,ToggleRecommend
的mode
参数没有被填充了请求中的值 - 相反,它是空的。
该请求被正确地到达我的服务器:该方法中的可变content
具有值mode=off
和Request.ContentLength
是8按预期方式。按照预期,Request.RequestType
也是“POST”。但是,Request.Form
为空:它没有键或值。 (我不知道这是否相关)。
这里怎么回事?如何获得我的mode
参数的值以进入我的操作方法?
问题必须与岗位做:如果我删除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代码并不重要的细节。
我不太了解原始HTTP,但是使用'Accept = application/json',请不要将请求的主体格式化为JSON? – McGarnagle
@dbaseman我也不确定,但我认为这个头文件指定了什么样的数据应该返回 - 操作方法应该返回JSON。 – Oliver
哦,对不起 - 如你所说,问题一定是你正在做一个GET而不是POST请求。 – McGarnagle