【发布时间】:2012-10-02 12:45:31
【问题描述】:
有没有人找到合适的解决方案? 我只是抱着很大的希望尝试了 WebAPI(在使用 KO 和 HTML5 在 php/restler 中成功实现了 rest api 之后)。获取就像魅力一样工作。在过去 20 多个小时内被困在岗位上,因为无论我的变量始终为空。我确实有 DTO 和存储库实现,这是我框架的一部分。 我尝试了 FromBody 提示以及搜索中几乎所有可用的内容。 我正在使用 Crest 和 Fiddler 对此进行测试。 我什至可以获取原始 request.content,然后自己处理 json 加载等。 这一点我只是感到沮丧并考虑回到 4.0 并使用 wcf 再次生成 ResT。 任何帮助将不胜感激......
DTO:
public class TestEntity
{
public TestEntity() { }
public int UserId { get; set; }
public string UserName { get; set; }
}
控制器: 公共类 testController : ApiController
{
// POST api/test
public TestEntity PostTest([FromBody] TestEntity t)
{
var x = new TestEntity();
if (!this.ModelState.IsValid)
{
return x;
}
else
{
return x;
}
}
我正在通过 CREST 调用 ....
【问题讨论】:
-
使用您的代码并通过 Fiddler 调用它对我来说适用于 XML 和 JSON。您可以通过向控制器添加 GET 方法来排除路由问题,该控制器返回带有一些测试数据的 TestEntity 并调用它。如果可行,请将它返回的数据复制到 Fiddler 作为您的 POST 请求正文,然后查看 t 是否被填充。这将排除序列化问题。如果仍然失败,请尝试发布完整的控制器代码,以及您在 Fiddler 中输入的 URL 和数据以进行测试。
-
在提琴手中我得到: {"ExceptionType":"System.InvalidOperationException","Message":"没有 MediaTypeFormatter 可用于从媒体类型为“未定义”的内容中读取“TestEntity”类型的对象''.","StackTrace":" 当我在 Crest 中运行时,它实际上会运行特定的方法(我可以调试)并且参数的值为 null
-
更新:将 Content-Type 更改为 json 后,它现在可以工作了。我很惊讶为什么它不能通过我在以前的项目中广泛使用的 Crest 工作(通过 php 5 中的 restler 2 创建的服务)。我还将检查它如何与通过 KnockoutJS 创建的 json 一起工作
-
现在当我从我的 html5 页面调用 api 时,我仍然得到空值。客户端代码是:` $.ajax({ datatype: 'json', contentType: "application/json; charset=utf-8", type: 'POST', url: 'localhost:9361/api/controllername', data: { data: ko .toJSON(vmModelName) }, `
-
已解决 - 这是 javascript 中的一个小不匹配!
标签: asp.net-ajax asp.net-web-api