首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >核心+ MongoDb -如何通过“代码”搜索数据库并返回原始url?

核心+ MongoDb -如何通过“代码”搜索数据库并返回原始url?
EN

Stack Overflow用户
提问于 2018-06-09 02:51:17
回答 2查看 651关注 0票数 -1

我不确定如何搜索存储在我的数据库中的“代码”,以便返回"OriginalUrl“。我知道我可以搜索ObjectId,但我希望能够通过分配给该ObjectId的“代码”进行搜索。

目前,我有一个工作程序,它接受一个Url以及“标题”,并将其发送到数据库:

它被分配了一个Objectid代码和一个随机生成的12个字符的“_id”:

如果对有帮助,这是我的类:

代码语言:javascript
复制
    namespace ShortenUrls.Controllers
    {
        [Route("api/codes")]
        public class ShortUrlsController : Controller
        {
            private readonly ShortUrlRepository _repo;

            public ShortUrlsController(ShortUrlRepository repo)
            {
                _repo = repo;
            }

            [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);
            }
}

和Repository类:

代码语言:javascript
复制
namespace ShortenUrls.Models.Repository
{
public class ShortUrlRepository
{
    private const string alphabet = "23456789bcdfghjkmnpqrstvwxyz-_";

    private static readonly Random rand = new Random();

    private readonly Database _db;

    public ShortUrlRepository(Database db)
    {
        _db = db;
    }

    private static string GenerateCode()
    {
        const int codeLength = 12;

        var chars = new char[codeLength];

        for (var i = 0; i < codeLength; i++)
        {
            chars[i] = alphabet[rand.Next(0, alphabet.Length)];
        }

        return new string(chars);
    }


    public Task<ShortUrl> GetAsync(string id)
    {
        var objId = ObjectId.Parse(id);

        return _db.Urls.Find(x => x.Id == objId).FirstOrDefaultAsync();
    }

    public Task CreateAsync(ShortUrl su)
    {
        su.Code = GenerateCode();
        return _db.Urls.InsertOneAsync(su);
    }
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档