我正在嘗試從 AngularJS 呼叫 .NET Core API。在 AngularJS 中,我這樣呼叫方法:
$http({
method: 'POST',
url: '/api/message/transaction/' this.transaction.id,
data: { "transactionJson": "hello"}
})
.then(function (response) {
var r = response;
})
我的 .NET Core API 方法是這樣的:
[Route("~/api/message/transaction/{transactionId}")]
[HttpPost]
public async Task<ActionResult<DeviceEventsTransactionmsg>> PostTransaction([FromBody] string transactionJson)
{
我從服務器收到 400 Bad Request 回應。我如何解決它?
uj5u.com熱心網友回復:
我意識到引數的型別必須是具有名為 的屬性的型別TransactionJson,因此我需要定義一個新的 C# 型別:
public class TransactionData() {
public string TransactionJson
}
然后在API方法中:
[Route("~/api/message/transaction/{transactionId}")]
[HttpPost]
public async Task<ActionResult<DeviceEventsTransactionmsg>> PostTransaction([FromBody] TransactionData transactionJson)
{
uj5u.com熱心網友回復:
從服務器回傳 400 Bad Request 回應。我如何解決它?
為了解決這個問題,正如您所提到的,一種解決方案是修改操作引數,如下所示。
public async Task<ActionResult<DeviceEventsTransactionmsg>> PostTransaction([FromBody] TransactionData transactionJson)
{
//...
//code logic here
TransactionData 班級
public class TransactionData
{
public string TransactionJson { get; set; }
}
此外,我們還可以實作并使用自定義的純文本輸入格式化程式,使 PostTransaction接受字串型別 ACTION 引數的操作方法運行良好。
public class TextPlainInputFormatter : TextInputFormatter
{
public TextPlainInputFormatter()
{
SupportedMediaTypes.Add("text/plain");
SupportedEncodings.Add(UTF8EncodingWithoutBOM);
SupportedEncodings.Add(UTF16EncodingLittleEndian);
}
protected override bool CanReadType(Type type)
{
return type == typeof(string);
}
public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
{
string data = null;
using (var streamReader = new StreamReader(context.HttpContext.Request.Body))
{
data = await streamReader.ReadToEndAsync();
}
return InputFormatterResult.Success(data);
}
}
添加自定義格式化程式支持
services.AddControllers(opt => opt.InputFormatters.Insert(0, new TextPlainInputFormatter()));
測驗結果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/350371.html
標籤:angularjs .net核心 asp.net-core-webapi
