2014-10-01 62 views
0

快速更新,因此,它在我的故障排除过程中原来的地方这个开始,如果我这样做,从我的应用程序后的工作,但如果我采取完全相同的数据,并尝试通过将它张贴提琴手该项目为空。尝试更换小提琴后,我坚持了很多“更容易”,但它看起来像烧毁了我,浪费了数小时。我也尝试通过chromes rest客户端发布这些数据,但它不起作用。我希望我知道为什么,因为如果我不能通过提琴手或镀铬物来工作,它真的会增加我未来的麻烦时间。的Web API后对象空

谢谢你试图帮助。


我想将数据从一个winforms应用程序发布到Web API。我最初有这个问题,但设置内容类型为应用程序/ JSON修复它,但现在我有相同的行为。我不记得改变什么,但我必须有。即使我从提琴手发布数据,也会发生这种情况。我从viemodel中删除了一切,但删除了1个字符串键值,以尝试消除数据本身中的格式问题,但在控制器端viewmodel仍然为空。不是价值观,而是视角模型本身。正在达成的控制器,但就像我说的对象为null

控制器看起来像这样

[HttpPost] public HttpResponseMessage LogValidation([FromBody]ValidationViewModel validationviewmodel) { //Do something }

示范

public class ValidationViewModel { public string AssetName { get; set; } }

被张贴

数据{ \"AssetName\":\"testname\" }

为了提供尽可能多的信息,当我从客户那里发布信息时,我正在做以下工作。这也是我如何生成的测试数据小提琴手使用

`public Task SubmitValidation() 
{ 
ReportValidaton reportvalidation = new ReportValidaton(); 
var serializedReportValidation = JsonConvert.SerializeObject(reportvalidation);   
var client = new HttpClient(); 
client.BaseAddress = new Uri("MyURI"); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeader("application/json")); 
MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter(); 
HttpContent content = new ObjectContent<ReportValidaton>(reportvalidation, jsonFormatter); 
HttpResponseMessage response = client.PostAsync("api/LogValidation/", content).Result; 

}` 
+0

您是否尝试POST {'AssetName:\“testname \”'},您能否看到GET请求是否有效? – Ofiris 2014-10-01 16:49:06

+0

我以前没有,但在你的评论后,我做了同样的结果。谢谢。我不确定发生了什么事。这在星期四工作。甚至尝试过我上个星期四生成的一些测试数据,以确保我使用的是相同的格式,但仍然没有去。我还有其他一些数据类型,但为了确保它不是数据或格式问题,而将它们全部删除。虽然我怀疑这是正确的轨道,但有一些格式问题,我只是没有看到它。 – Grayson 2014-10-01 16:53:34

+0

你最近重新命名了你的参数吗?通常当这发生在我身上时,这意味着我忘记了在重构后更新我的路由映射。 – Adam47 2014-10-01 17:46:06

回答

3

当从小提琴手发布,确保:

  • 认为该数据是不是就Content-Type头被设置为application/json
  • 包含转义字符串:{"AssetName":"testname"}和NOT {\"AssetName\":\"testname\"}
  • 该方法设置为POST
+0

这解决了小提琴手的问题。谢谢。我从serializedReportValidation中提取数据,应该从content.ReadAsStringAsync()中提取数据。仍然不确定为什么发布从客户端不工作,但现在它的工作,所以我都很好。 – Grayson 2014-10-01 18:07:01

+0

您的意思是发布客户_was_ working或_not_?你的问题说客户端工作,小提琴手din't。 – Mrchief 2014-10-01 18:08:55

+0

如果您的意思是Chrome客户端(POSTMan或高级REST客户端或类似的),那么上述步骤也应该修复它们。 – Mrchief 2014-10-01 18:10:24