2017-05-29 427 views
0

我建立一個簡單的API來檢索db.It賬戶餘額工作正常,如果我帕拉姆追加到URI這樣如何把asp.net webapi參數放在body(post)而不是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」, 「堆棧跟蹤」: 「在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}"); 

在郵差車身> form-data的我進入

重點= accountBalance值= DS-00001

我想json的響應,

{「account_number」:「CS-0000011」,「balace」:7817.7}

我可能對我的郵遞員輸入有誤,或者我沒有爲此做R & D,但幫助新手仍然是你的專家的祝福。

謝謝。

回答

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中的一個很棒的功能來確定響應消息

+0

謝謝你sir.worked像魅力。我得到了平衡的JSON響應爲「6000」。我希望響應爲{「account_number」:「DS-000001」,「balace」:6000 }。如何得到那個?對不起,如果那太蹩腳回答或任何鏈接將幫助。謝謝你先生。:) – OLDMONK

+1

@OLDMONK更新我的答案與解決方案,您的新增要求 –

+1

謝謝你太多先生。你是一個祝福。再一次感謝你。:) – OLDMONK

1

嘗試更改郵差中的身體類型以將數據發送爲: "raw" JSON(application/json) 而不是form-data

以下是有關如何引導:https://www.getpostman.com/docs/requests

+0

你好,先生..我把這樣的數據發送爲「raw」JSON(application/json){ 「accountNumber」:「DS-10896」 } 沒有錯誤,但響應只是空的「」。 – OLDMONK

+0

請參閱下面@ Marcus-h的答案,它顯示瞭如何正確匹配您的JSON對象的控制器參數。 – Steveland83

+0

謝謝先生:) – OLDMONK