Warm tip: 本文翻译自 stackoverflow.com,查看原文请点击:, please click

c#-ASP.NET CORE,Web API:没有路由与提供的值匹配

(c# - ASP.NET CORE, Web API: No route matches the supplied values)

发布于 2016-09-12 21:52:49

请注意:此问题是在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],它将起作用。

但这不是我的解决方案。

Questioner
Benjamin Schäublin
Viewed
0
Benjamin Schäublin 2016-09-14 22:43:17

我将回答我自己的问题:这确实是Microsoft版本控制包中的错误,将很快得到修复。

https://github.com/Microsoft/aspnet-api-versioning/issues/18