Передача JSON объекта методу GET - ASP. Net ApiController - PullRequest
2 голосов
/ 05 августа 2020

Я надеюсь передать строку URI в метод GET в моем классе-наследнике APIController. Я попытался поместить его в Content как необработанный текст и как строковый параметр, но безуспешно. Я сделал модель для передачи в качестве параметра:

namespace ServerDock.Models.Web
{
    using System.Runtime.Serialization;

    [DataContract]
    public partial class UriWeb
    {
        [DataMember]
        public string Uri_String { get; set; }

        public UriWeb() { }

    }
}

Теперь моя функция контроллера выглядит следующим образом:

[Route("file", Name = "Download")]
[HttpGet]
public async Task<IHttpActionResult> DownloadFile([FromBody] UriWeb uri)

С вызовом Postman, тело которого JSON выглядит как следует:

{
    "Uri_String":"https://mysite.windows.net/files/ec0a30c8-265d-4c94-b176-387004f5f566-.jpg"
}

Моя точка останова в функции контроллера никогда не срабатывает, и я получаю сообщение об ошибке: тело запроса неполное.

Есть идеи, что я делаю неправильно?

1 Ответ

1 голос
/ 05 августа 2020

Измените [HttpGet] на [HttpPost]. GET не может иметь параметр [FromBody]:

[Route("file")]
[HttpPost]
public async Task<IHttpActionResult> DownloadFile([FromBody] UriWeb uri){...}

Если вам нужно использовать GET, вам нужно передать его как строку запроса. Таким образом, вы бы изменили его на:

[Route("file")]
[HttpGet]
public async Task<IHttpActionResult> DownloadFile([FromQuery] Uri uri){...}

А затем назовите его так (строка запроса была закодирована):

http://example.com/api/file?uri=http%3A%2F%2Fexample.com%2Ffile.zip
...