MongoDB / Asp.Net Core удаляет ошибку метода с помощью «фильтра» - PullRequest
0 голосов
/ 31 мая 2018

Я работаю над Url Shortener в Asp.Net Core и использую MongoDB.В настоящее время у меня есть рабочий метод Get и рабочий метод Create.Я столкнулся с проблемой с моим методом Delete, и вот сообщение, которое я получаю:

Аргумент 1: невозможно преобразовать из 'MongoDB.Driver.FilterDefinition)', кандидаты: System.Threading.Tasks.Задача DeleteOneAsync (MongoDB.Driver.) (в классе IMongoCollectionExtensions)

Ошибка связана с этим ".DeleteOneAsync ( filter );"в моем классе 'ShortUrlRepository':

 public async Task<ShortUrl> Delete(ShortUrl su)
        {
            var filter = Builders<Url>.Filter.Eq("Su", su);
            return await _db.Urls.DeleteOneAsync(filter);
        }

Мой класс ShortUrlsController, кажется, работает нормально, но я опубликую его в случае:

namespace ShortenUrls.Controllers
{
    [Route("api/codes")]
    public class ShortUrlsController : Controller
    {
        private readonly ShortUrlRepository _repo;
        //private readonly IShortUrlService _service;

        public ShortUrlsController(ShortUrlRepository repo  /*IShortUrlService service*/)
        {
            _repo = repo;
            //_service = service;
        }

        [HttpGet("{id}")]
        public async Task<IActionResult> Get(string id)
        {
            var su = await _repo.GetAsync(id);

            if (su == null)
                return NotFound();

            return Ok(su);
        }

        [HttpPost]
        public async Task<IActionResult> Create([FromBody] ShortUrl su)
        {
            await _repo.CreateAsync(su);
            return Ok(su);
        }

        [HttpDelete("{id}")]
        public async Task<IActionResult> Delete (ShortUrl su)
        {
            try
            {
                if (su == null)
                    return new NotFoundResult();
                await _repo.Delete(su);
                return Ok("Deleted Successfully");
            }
            catch (Exception ex)
            {
                return BadRequest(ex.ToString());
            }


        }
    }
}

Я пробовал другие методы удаления, ноПолучены похожие ошибки, так что, может быть, я что-то упустил?

Если кто-то может предложить некоторые предложения, я был бы очень признателен, поскольку я новичок в Asp.Net Core и у меня очень мало успеха в поиске решения этой ошибки.Если я могу предоставить больше информации , пожалуйста, , дайте мне знать.

1 Ответ

0 голосов
/ 01 июня 2018

Создание переменной 'r' и ее возврат устраняет ошибку «Аргумент 1»:

public async Task<bool> Delete(ObjectId id)
        {
            var filter = Builders<ShortUrl>.Filter.Eq(x => x.Id, id);
            var r = await _db.Urls.DeleteOneAsync(filter);
            return r.DeletedCount > 0;
        }

Я внес другие изменения, которые не связаны с этой ошибкой но были необходимы для правильной работы метода Delete.Вот изменения, которые я должен был внести в мой класс ShortUrlsController:

[HttpDelete("{id}")]
        public async Task<IActionResult> Delete (string id)
        {
            return (await _repo.Delete(ObjectId.Parse(id)))
             ? (IActionResult) Ok("Deleted Successfully")
             : NotFound();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...