1

我是 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=offmode参数会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 代码的细节无关紧要。

4

1 回答 1

1

您的 ajax 调用内容/类型是 text/html,您需要向控制器指定您正在发送应用程序/json 信息,否则他会收到信息,但不知道如何将其分发给它的参数

于 2012-10-04T06:27:51.267 回答