HttpContext.Request.Form不包含MVC

时间:2016-01-11 09:22:46

标签: c# asp.net-mvc asp.net-mvc-4 httprequest

以下是我如何将数据发布到MVC中的控制器操作的示例。数据完全填充到我的模型对象并且工作正常。

var data={};
data.SearchText = 'abc'
data.SearchText1 = 'abcd'
var contentType = 'application/json; charset=utf-8';

$.ajax({
      type: 'POST',
      cache: false,
      contentType: contentType,
      url: User/_UserList,
      data: JSON.stringify(data),
      success: successHandlerFunction,
      complete: completeHandlerFunction
});

[HttpPost]
public JsonResult _UserList(SearchViewModel model)
{
    var  users= "" ; //Get Data from DB ;
    return Json(users, JsonRequestBehavior.AllowGet);
}

但是如果出现异常,我试图获取模型的值

public void OnException(ExceptionContext filterContext)
{


//filterContext.HttpContext.Request.Form -- is not giving any value
//filterContext.HttpContext.Request.QueryString -- is also having no value
//filterContext.HttpContext.Request.Params -- also no value about model

}

任何人都可以告诉我为什么上面的代码无效

2 个答案:

答案 0 :(得分:2)

抱歉 - 无法评论您的回答,因此请回答新问题。 解决方案是正确的 - 您应该将contentType设置为' application / x-www-form-urlencoded'。这里清楚地描述了原因:HttpRequest.Form Property

  

当HTTP请求Content-Type值为" application / x-www-form-urlencoded"时,将填充Form属性。或" multipart / form-data"。

至于' JSON.stringify(数据),' - 这将实际从字典中生成一个字符串,在这种情况下,HttpRequest.Form无法填充,因为它需要字典,基本上只是数据'。

答案 1 :(得分:0)

通过从'application / json更改contentType; charset = utf-8'到 'application / x-www-form-urlencoded'HttpContext.Request.Form开始填充值。我们还需要在传递数据时删除JSON.stringify。

如果我们使用contentType'application / json发布数据; charset = utf-8'。从请求对象我们需要检索Json内容然后我们可以使用下面的代码

 private string GetJsonContents(System.Web.HttpRequestBase Request)
    {
        string JsonContents = string.Empty;
        try
        {
            using (Stream receiveStream = Request.InputStream)
            {
                using (StreamReader readStream = new StreamReader(receiveStream))
                {
                    receiveStream.Seek(0, System.IO.SeekOrigin.Begin);
                    JsonContents = readStream.ReadToEnd();
                }
            }
        }
        catch
        {
        }
        return JsonContents;
    }

然后我们可以使用以下代码来获取JSON对象

 string requestData = GetJsonContents(HttpContext.Current.Request);
 dynamic jsonObject = JsonConvert.DeserializeObject<dynamic>(requestData);//using Newtonsoft dll