请注意:此问题是在2016年提出的。此问题的原始答案是更新microsoft api versiong程序包。目前,该问题再次发生,但由于其他原因。
原始问题:
我在asp.net核心(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核心的任何调试帮助(就像任何现有的路由调试器一样)。
我将不胜感激任何帮助!
编辑 看起来这可能是Microsoft版本控制包中的一个错误..如果我定义了修复路由/ api / v1 / [Controller],它将起作用。
但这不是我的解决方案。
我将回答我自己的问题:这确实是Microsoft版本控制包中的错误,将很快得到修复。
https://github.com/Microsoft/aspnet-api-versioning/issues/18
尽管不是因为该错误,我还是遇到了同样的问题,我在中输入了错误的名称
CreatedAtRoute("WrongActionMethodName", dto)
。尚未修复