CreateAtRoute生成500错误

时间:2017-02-16 19:39:05

标签: c# asp.net-core asp.net-core-mvc

我正在尝试学习ASP.NET核心MVC,我对这个主题非常认真。

我使用EntityFrameworkCore创建了一个非常简单的webapi,使用简单的DI注入来测试我自己的理解。 DI注入部分的实体框架工作正常,记录正确地写入数据库,这是一种解脱。但是,每次我使用POST从邮递员添加记录时,我的记录都被添加到数据库中,但邮递员中有错误500。我无法找到错误发生的位置,但我认为错误可能发生在CreateAtRoute

enter image description here

以下是我项目的结构,为了完整起见,我将其包含在内。

enter image description here

记录在数据库中正确添加,因此实体框架和DI注入部分应该没问题。这是我在邮递员中的命令

http://localhost:7575/api/receipt

这是我添加的记录: enter image description here

点击发送后,POSTMAN生成错误500:

enter image description here 我的控制器代码附在下面:

namespace TestReceipt2.Controllers
{
    [Route("api/[controller]")]
    public class ReceiptController : Controller
    {
        private readonly IReceiptRepository _receiptRepository;

        public ReceiptController(IReceiptRepository receiptRepository)
        {
            _receiptRepository = receiptRepository;
        }

        public IActionResult Index()
        {
            return View(_receiptRepository.GetAll());
        }
        // GET: api/values
        [HttpGet]
        [ResponseCache(Duration =60, Location =ResponseCacheLocation.Client)]
        public IEnumerable<Receipt> GetAll()
        {
            return _receiptRepository.GetAll();
        }

        // GET api/values/5
        [HttpGet("{id}",Name ="GetReceipt")]
        public IActionResult Get(string id)
        {
            var Item = _receiptRepository.Find(id);
            if (Item==null)
            {
                return NotFound();
            }
            return new ObjectResult(Item);
        }

        // POST api/values
        [HttpPost]
        public IActionResult Post([FromBody]Receipt value)
        {
            if (value==null)
            {
                return BadRequest();
            }
            TryValidateModel(value);
            if (this.ModelState.IsValid)
            {
                try
                {
                    _receiptRepository.Add(value);
                }
                catch (System.Exception)
                {
                    throw;
                }
            }
            else
            {
                return BadRequest();
            }
            return CreatedAtRoute("GetReceipt", new { controller = "Receipt", id = value.ID });
        }

        // PUT api/values/5
        [HttpPut("{id}")]
        public IActionResult Put(string id, [FromBody]Receipt value)
        {
            var receipt = _receiptRepository.Find(id);
            _receiptRepository.Update(value);
            return new NoContentResult();
        }

        // DELETE api/values/5
        [HttpDelete("{id}")]
        public void Delete(string id)
        {
            _receiptRepository.Remove(id);
        }
    }
}

如上所述,我对所有这些ASP.NET核心MVC的东西都是新手,错误可能是由于我的经验不足或显而易见而导致的微不足道的错误......或者可能不是错误?我只是不知道Postman为什么抱怨而且我不知道如何找出它指的是哪个内部错误......

任何帮助我揭示这个谜团的指针都将非常感激。

1 个答案:

答案 0 :(得分:-1)

您正在使用CreatedAtRoute的错误重载。使用带有三个参数的重载。

A very similar answer