Asp.net çekirdeği: ham dize parametresiyle eylem

Sep 18 2020

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

1 MichaelWang Sep 25 2020 at 14:17

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)

1 mtkachenko Sep 18 2020 at 15:41

Dize ve nesne yerine bir girdi parametresi olarak JsonObject kullanın .