我正在构建一个简单的api来从db中检索帐户的余额。如果我将这个param附加到这样的URI
,它就可以正常工作http://localhost:8080/v1/api/accounts/balance?accountBalance=DS-00001
但是当我尝试在我的行动中使用[FromBody]从身体中获取它
[HttpPost]
[ActionName("balance")]
public string GetBalance([FromBody]string accountNumber)
{
var data = BusinessLayer.Api.AccountHolderApi.GetBalance(accountNumber);
return data;
}
我在邮递员中收到此错误
“消息”:“此资源不支持请求实体的媒体类型'multipart / form-data'。”, “ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为'multipart / form-data'的内容中读取'String'类型的对象。”, “ExceptionType”:“System.Net.Http.UnsupportedMediaTypeException”, “StackTrace”:“在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型类型,IEnumerable
1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable
1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)”
我确实发现这里的问题与这个问题有点相似,但是无法通过。https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api但是仍然如此。就像在这里所说的原始类型使用[FromBody]属性但仍然。
我的路线
config.Routes.MapHttpRoute("MobileBankingApi", "v1/api/{controller}/{action}");
在Postman Body> form-data i中输入
Key = accountBalance Value = DS-00001
我希望json响应为
{ “ACCOUNT_NUMBER”: “CS-0000011”, “发余下的”:7817.7}
我的邮递员输入可能有问题,或者我不是为此而做R& D但是帮助新手仍然是你的大师们的祝福。
谢谢。
答案 0 :(得分:1)
尝试更改Postman中的Body类型以将数据发送为:
"raw" JSON(application/json)
而不是form-data
。
以下是相关的操作指南:https://www.getpostman.com/docs/requests
答案 1 :(得分:1)
根据我从评论中看到的,您将数据发布为{ "accountNumber":"DS-10896" }
要在控制器中对此进行匹配,您需要定义一个对象,该对象具有一个名为accountNumber的字符串参数,并从正文中读取该对象。
首先,定义一个类
public class Account
{
public string accountNumber { get; set; }
}
然后将其添加为身体参数
[HttpPost]
[ActionName("balance")]
public string GetBalance([FromBody]Account account)
{
var data = BusinessLayer.Api.AccountHolderApi.GetBalance(account.accountNumber);
return data;
}
然后当您发布数据时,使用与现在相同的json结构,即{ "accountNumber":"DS-10896" }
<强>更新强>
要返回具有您请求的值的对象,我只需将第二个参数添加到Account类中
public class Account
{
public string accountNumber { get; set; }
public int balance { get; set; }
}
然后在控制器方法
中填充对象值HttpPost]
[ActionName("balance")]
public IHttpActionResult GetBalance([FromBody]Account account)
{
account.balance = BusinessLayer.Api.AccountHolderApi.GetBalance(account.accountNumber);
return Ok(account);
}
注意:查看IHttpActionResult这是web api中的一项重要功能,以确定响应消息