Asp.net çekirdeği: ham dize parametresiyle eylem
Ham bir dize parametresi ile bir eylem yazmaya çalışıyorum.
Bu dizge dinamik olarak bir json olarak ayrıştırılacaktır, bu nedenle json'daki anahtarlar derleme sırasında bilinmez.
Yöntemi şu şekilde ilan ettim:
[HttpPost("MyAction")]
public async Task<ActionResult<long>> MyAction([FromBody] string command)
{
var cmd = MyCqrsCommand(command);
return await Mediator.Send(cmd);
}
Bir parametreyi application / json olarak gösteren swagger ile yöntemi çağırıyorum
Sonuç bu
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|4e0e9c40-4036f8a9873ecac8.",
"errors": {
"$": [ "The JSON value could not be converted to System.String. Path: $ | LineNumber: 0 | BytePositionInLine: 1."
]
}
}
İki farklı çözüm buldum:
[HttpPost("MyAction")]
public async Task<ActionResult<long>> MyAction([FromBody] object command)
{ ... }
[HttpPost("MyAction")]
public async Task<ActionResult<long>> MyAction(string command)
{ ... }
Nesneyi kullanmak zarif değil ama işe yarıyor. Uri'de "string" kullanmak bazı sınırlamalara sahiptir, bu yüzden öncekini tercih ederim.
En iyi çözüm hangisi? Ve dizgeyi nesne olarak değil, dize olarak bildirilen gövdeye eklemenin bir yolu var mı?
Yanıtlar
En iyi çözüm hangisi?
Nesne parametresi çözümünü kullanmayı tercih ediyorum.
[HttpPost("MyAction")]
public async Task<ActionResult<long>> MyAction([FromBody] object command)
{ ... }
Gördüğümüz isteğinizin ekran itibaren, bir gönderilen JSON nesnesi { "key": "value" } sizin için MyActionyöntemle. Yani parametrenizi olarak ilan etmemelisiniz string.
Ve dizgeyi nesne olarak değil, dize olarak bildirilen gövdeye eklemenin bir yolu var mı?
Giriş parametresi olarak "string" kullanmayı bekliyorsanız, sadece değerin içeriğini gönderin.
[HttpPost("/MyAction")]
public async Task<ActionResult<long>> MyAction([FromBody] string command)
Dize ve nesne yerine bir girdi parametresi olarak JsonObject kullanın .