请注意:此问题是在2016年提出的。当时解决该问题的原始方法是更新Microsoft API版本包。当前,该问题再次出现,但原因不同。
原问题:
我在asp.net core(web api)中遇到路由问题。
我有这个控制器(简化版):
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[Controller]")]
public class DocumentController : Controller
{
[HttpGet("{guid}", Name = "GetDocument")]
public IActionResult GetByGuid(string guid)
{
var doc = DocumentDataProvider.Find(guid);
if (doc == null)
return NotFound();
return new ObjectResult(doc) {StatusCode = 200};
}
[HttpPost]
public IActionResult Create([FromBody] Document doc)
{
//... Creating Doc
// Does not work
var val = CreatedAtRoute("GetDocument", new {guid = doc.Guid.ToString("N")}, document);
// or this:
CreatedAtRoute("GetDocument", new { controller = "Document", guid = doc.Guid.ToString("N")}, document);
// neither this
var val = CreatedAtRoute("GetDocument", new { version = "1", controller = "Document", guid = doc.Guid.ToString("N")}, document);
return val;
}
}
如果我调用Create,文档会被创建并且路由对象也被创建了,但是我收到了“没有与提供的值匹配的路由”错误并且返回了500状态。我可以直接调用GetByGuid而没有任何问题。
我找不到任何适用于ASP.NET Core的调试帮助(例如任何现有的路由调试器)。
我会感激任何帮助!
编辑 看起来这可能是微软版本控制包中的一个bug..如果我定义固定路由/api/v1/[Controller],它就能工作了。
但对我来说,这不是一个解决方案。
GetByIdAsync()
改为GetById()
。 - undefined