Как передать строку в URL-адресе в качестве параметра в основной контроллер API asp.net - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь создать API, который берет файл IForm из тела, а затем сохраняет файл. Затем верните имя файла в ответе. Я достиг того же самого раньше. Но тогда у меня было целочисленное значение в качестве параметра, в данном случае это строка. Я пытаюсь таким образом. Но когда маршрут совпадает, он всегда возвращает статус 200 без сохранения файла и имени файла в ответе.

[HttpPost]
[Route("/api/users/${email}/photos")]
public async Task<IActionResult> Upload(string email, [FromBody]IFormFile fileStream)
{
    var user = this.repository.GetUserByEmail(email);
    if (user == null)
        return NotFound();
    var uploadsFolderPath = Path.Combine(host.WebRootPath, "Images");
    if (!Directory.Exists(uploadsFolderPath))
        Directory.CreateDirectory(uploadsFolderPath);

    if (fileStream == null) return BadRequest("null file");
    if (fileStream.Length == 0) return BadRequest("Empty file");
    if (fileStream.Length >= photoSettings.MaxBytes) return BadRequest("Max file size exceeded");
    if (!photoSettings.IsSupported(fileStream.FileName)) return BadRequest("Invalid file type");

    var fileName = Guid.NewGuid().ToString() + Path.GetExtension(fileStream.FileName);
    var filePath = Path.Combine(uploadsFolderPath, fileName);
    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        await fileStream.CopyToAsync(stream);
    }
    user.ImageUrl = fileName;
    await unitOfWork.CompleteAsync();
    return Ok(fileName);
}

Хотя ответ 200. он даже не показывает неверный запрос, когда он должен иметь недопустимый тип файла.

1 Ответ

0 голосов
/ 07 сентября 2018

Похоже, вы поняли это, но просто для ответа на вопрос вам нужно удалить $, и вы можете указать, что параметр email взят из маршрута, используя атрибут [FromRoute], но это может быть требуется.

[HttpPost]
[Route("/api/users/{email}/photos")]
public async Task<IActionResult> Upload([FromRoute]string email, [FromBody]IFormFile fileStream)
{
    //..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...