【问题标题】:F# MvcWebApi - Postman - FromBody always nullF# MvcWebApi - Postman - FromBody 始终为空
【发布时间】:2015-03-18 14:59:50
【问题描述】:

我刚刚开始使用 F# MvcWebApi。我已经从基本模板开始,并设法让它工作到我将数据放入邮递员请求的正文中。每次我尝试访问从正文传递的任何值时,由于某种原因它们总是为空,即(在下面的情况下,数据将始终为空)任何人都可以帮我解决这个问题

值控制器代码

type ValuesController() =
    inherit ApiController()

   //Always returs null
   member x.Post ([<FromBody>] data:string) = data

   //Works
   member x.Post ([<FromBody>] data:string) = "Succesful"

我正在使用邮递员调用 api

【问题讨论】:

  • 在这种情况下,我认为“FromBody”属性不适合您 - 您是否尝试过不使用它(或者只是设置断点并查看控制器的环境变量,请求,...)
  • 如果我不使用正文,我会收到一个错误 ""Message": "No HTTP resource was found that match the request URI 'localhost:50442/api/values'.","

标签: asp.net-mvc f# postman


【解决方案1】:

虽然我不知道 Postman,但在这两种情况下,您似乎都将 Content-Type 设置为“application/json”。当您说您发布“application/json”(或“application/xml”)时,Web API 将尝试将您的结构化数据绑定到“模型”。

您是否尝试过使用 F# 记录?

[<CLIMutable>]
type DataModel = { data : string }

type ValuesController() =
    inherit ApiController()

    member x.Post (dataModel : DataModel) = x.Ok data

您还需要add this statement to your configuration:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver <-
    Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()

【讨论】:

  • 嘿,马克我没有 (x.OK) 的选项,但我尝试了成员 x.Post (dataModel : DataModel) = dataModel.data 并且仍然为空
  • @AlanMulligan 这是method on ApiController,但我记错了大小写。会修复的。
  • @AlanMulligan 您能否将您的 HTTP 请求和响应以纯文本形式发布,而不是 Postman,以便更容易重现您的问题?
  • @AlanMulligan 这没什么帮助,但我已经更新了我的答案。如果您需要更多详细信息,请点击链接 :)
  • 我在 .Net Core 中遇到了这种行为。但是,我没有看到 GlobalConfiguration 类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2018-12-26
  • 1970-01-01
相关资源
最近更新 更多