以下是我如何将数据发布到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
}
任何人都可以告诉我为什么上面的代码无效
答案 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