我正在尝试学习ASP.NET核心MVC,我对这个主题非常认真。
我使用EntityFrameworkCore
创建了一个非常简单的webapi,使用简单的DI注入来测试我自己的理解。 DI注入部分的实体框架工作正常,记录正确地写入数据库,这是一种解脱。但是,每次我使用POST从邮递员添加记录时,我的记录都被添加到数据库中,但邮递员中有错误500。我无法找到错误发生的位置,但我认为错误可能发生在CreateAtRoute
。
以下是我项目的结构,为了完整起见,我将其包含在内。
记录在数据库中正确添加,因此实体框架和DI注入部分应该没问题。这是我在邮递员中的命令
http://localhost:7575/api/receipt
点击发送后,POSTMAN生成错误500:
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为什么抱怨而且我不知道如何找出它指的是哪个内部错误......
任何帮助我揭示这个谜团的指针都将非常感激。