【发布时间】:2016-08-02 07:07:07
【问题描述】:
在我的 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路由名称在哪里定义? -
@haim770 在最后的代码 sn-p 中定义。
-
var link = Url.Link("SubscriberLink", new { id = subscriber.ID });是返回正确的 Url 还是不抛出异常? -
这是一个很好的例子,说明了一个经过充分研究和很好解释的问题。干杯!
标签: c# asp.net-core