在我的ASP.NET Core应用程序中,我有一个控制器动作,如下所示:
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
var link = Url.Link("SubscriberLink", new { id = subscriber.ID });
return Created(link, null);
}
上述代码按预期运行。但是,如果我使用内置方法“CreatedAtRoute”,那么就会出现异常:
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
return CreatedAtRoute("SubscriberLink", new { id = subscriber.ID });
}
异常信息如下:
System.InvalidOperationException: 找不到匹配的路由。
这个异常会导致服务返回500状态码。
两种情况下使用的是相同的路由,因此我不知道为什么第一个示例可以正常工作,而第二个示例不能。
我的 project.json
文件包含以下内容:
"frameworks": {
"dnx46": { },
"dnxcore50": { }
},
为了参考,命名路由由两部分组成。第一部分是控制器前缀:
[Route("api/[controller]")]
public class SubscribersController : Controller
{
// ...
}
第二个是GET操作,其中实际的"SubscriberLink"
路由被命名:
[HttpGet("{id}", Name = "SubscriberLink")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Subscriber))]
public async Task<IActionResult> GetSubscriber(Guid id)
{
//...implementation removed...
return Ok(subscriber);
}
你有什么想法?
SubscriberLink
路由名称定义在哪里? - haim770var link = Url.Link("SubscriberLink", new { id = subscriber.ID });
返回正确的 URL 还是仅仅没有抛出异常? - haim770