我见过很多类似的问题,我尝试了所有可能的答案,但我的问题仍然是相同的。基本上,我有以下ajax电话。参数为空
var obj = {
Duration: 12000,
Errors: 2
};
var post = $.ajax({
url: APIUrl,
data: JSON.stringify(obj),
type: "POST",
cache: false,
dataType: 'json',
contentType: 'application/json, charset=utf-8'
});
这是我的视图模型。
public class TargetBasedViewModel
{
public int Duration{ get; set; }
public int Errors{ get; set; }
}
这里是我的控制器。
[HttpPost]
public HttpResponseMessage Post(TargetBasedViewModel test)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
问题是该参数保持为空。 我已经使用Fiddler来检查请求,它看起来很好,所有的属性都在那里,我甚至可以检查JSON对象,并确保我的值实际上被发送到服务器。我已经阅读了很多文章,甚至试图将[ModelBinder]和[FromBody]添加到参数中,但仍然没有运气。 我也试图加入到我的Application_Start()
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings();
任何想法我可能是做错了?
我假设你的问题是控制器方法正在被调用,它只是一个空参数?你可以看看控制器认为发布的数据是什么样的。 –
是的,我实际上在控制器的开始处有一个断点,一切都加载正常,除非我一直在参数中获得一个空值。我希望能够“检查”控制器请求中的内容,但序列化程序或模型联编程序应该负责创建我定义的类的实例。换句话说,我不知道如何检查控制器中的其他内容,现在我只使用Fiddler,请求看起来很好。 – And
如果你看看ControllerContext,你可以进入HttpContext并从那里到HttpRequest。然后您可以查看Form集合或QueryString集合。既然你发布了,我认为你的数据应该可以在Form集合中找到,但由于你没有使用序列化表单,我不确定会传达什么。 –