【问题标题】:C# Asp.net Web API - creating a JSON/XML converter APIC# Asp.net Web API - 创建 JSON/XML 转换器 API
【发布时间】:2013-10-24 17:02:26
【问题描述】:

作为一个练习,我想创建一个在 XML 和 JSON 之间转换的 ASP.Net Web API。

这是我目前所拥有的:

我认为内容类型检查是正确的,但我无法测试,因为我在尝试发布时收到“方法不允许”,是否可以通过路由/绑定来实现我的目标?

我正在尝试使用 Fiddler 进行测试:

我的路线如下所示:

我的 webapi 路由如下所示: 但我仍然得到不允许的方法:=/

【问题讨论】:

  • 你怎么称呼这个动作?你能显示你的客户代码吗?另请显示您当前的路线设置。
  • @DarinDimitrov 我已经添加了这个信息:)
  • 不,你展示了你的 MVC 路由设置,而不是你的 Web API 路由。这是两个完全不同的东西。此外,您不能期望在您的 Post 操作中将 POST 请求有效负载放入名为 jsonOrXml 的变量中。您必须从请求正文中读取它。它不会作为参数出现。或者,如果您愿意,则必须编写自定义模型绑定器或格式化程序。
  • @DarinDimitrov 抱歉,我们的 webapi 路由在哪里?如何从请求正文中加载?
  • 默认情况下,当您使用向导创建新应用程序时,它们被放置在~/App_Start/WebApiConfig.cs。同样从您的 Fiddler 屏幕截图中,我可以看到您提供了无效的 JSON 有效负载:{sample:"true"}。一个有效的 JSON 应该是这样的:{"sample":"true"}.

标签: c# asp.net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

尝试使用FromBodyAttribute 注释您的操作参数。这是一个例子:

public class TestController : ApiController
{
  public string Post([FromBody] string jsonOrXml)
  {
    // Process the input
  }
}

在这种情况下,Content-Type 请求标头必须为 application/x-www-form-urlencoded,并且正文将具有以下格式:=[JSON or XML data]。更多详情请见here

希望这会有所帮助。

【讨论】:

  • 谢谢,这解决了 Method Not Found 错误,但是“jsonOrXml”变量为空
  • @GreyCloud 我已经更新了我的答案(添加了指向另一个 SO 问题的有用链接)。
  • 谢谢,这看起来很有希望,这意味着我必须包装任何 json 或 xml,例如{"toconvert": {"sample":"1"}} 以便匹配 MVC 中的模型
  • 我明天会试试这个,同时我想知道是否可以在不包装的情况下做到这一点?
  • @GreyCloud 只要您使用application/x-www-form-urlencoded 作为内容类型,您就不必包装任何内容。否则,您需要将 POST 数据(JSON 或 XML 字符串)映射到的模型类型(加上正确的请求类型)。
猜你喜欢
  • 2012-03-23
  • 2014-09-05
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多