ASP.Net Core保存base64字符串

时间:2017-03-31 14:08:05

标签: asp.net-core asp.net-core-mvc entity-framework-core

我有一个Image模型:

public class Image
{
    [Key]
    public long ImagelId { get; set; }
    public string base64 { get; set; }
}

我使用如下:

public class CoreGoal
{
    [Key]
    public long CoreGoalId { get; set; }
    [Required]
    public string Title { get; set; }

    public virtual ICollection<Image> Images { get; set; }


    public CoreGoal()
    {

    }
}

我正在使用MySql数据库。我打算将多个图像存储为每个CoreGoal的base64字符串。

每当我使用base64字符串发出POST请求时,它都会成功,但是在保存到数据库时,字符串的很大一部分会被切断。

我使用错误的数据结构存储base64即字符串吗?这是我的ASP.Net代码中的问题还是MySql限制?

我该如何解决这个问题?

更新

我的存储库类:

public class CoreGoalRepository : ICoreGoalRepository
{
    private readonly WebAPIDataContext _db;

    public CoreGoalRepository(WebAPIDataContext db)
    {
        _db = db;
    }

    //Add new
    public void CreateCoreGoal(CoreGoal coreGoal)
    {
        _db.CoreGoals.Add(coreGoal);
        _db.SaveChanges();
    }

    //Get all
    public IEnumerable<CoreGoal> GetAllCoreGoals()
    {
        return _db.CoreGoals
            .Include(coreGoal => coreGoal.Benefits)
            .Include(coreGoal => coreGoal.Images)
            .ToList();
    }
}

public interface ICoreGoalRepository
{
    void CreateCoreGoal(CoreGoal coreGoal);
    IEnumerable<CoreGoal> GetAllCoreGoals();
}

我的控制器:

 [Route("api/[controller]")]
    public class CoreGoalController : Controller
    {
        private readonly ICoreGoalRepository _coreGoalRepository;

        //Controller
        public CoreGoalController(ICoreGoalRepository coreGoalRepository) {
            _coreGoalRepository = coreGoalRepository;
        }

        //Get methods
        [HttpGet]
        public IEnumerable<CoreGoal> GetAll()
        {
            return _coreGoalRepository.GetAllCoreGoals();
        }

        //Create
        [HttpPost]
        public IActionResult Create([FromBody] CoreGoal item)
        {
            if (item == null)
            {
                return BadRequest();
            }

            _coreGoalRepository.CreateCoreGoal(item);

            return CreatedAtRoute("GetCoreGoal", new { id = item.CoreGoalId }, item);
        }
     }

1 个答案:

答案 0 :(得分:1)

当您发布帖子请求时,还会返回创建为JSON的对象,这样您就可以看到URL,或者在帖子中放置一个断点并查看base64字符串的值。

如果URL正常则为Db,因此您需要使用属性[StringLength(length)]

手动设置URL的最大大小