我正在使用 mvc 6 创建一个 web api。现在我正在尝试从我的数据库中获取一个元素。此表中的键是一个字符串(电子邮件地址)。我无权访问此数据库,因此无法更改此表的键。
现在,当创建一个演示 webapi 时,我能够创建一个控制器来基于一个 int 键来提取项目。但是当试图通过字符串获取元素时,程序崩溃了。
[Route("api/[controller]")]
public class TodoController : Controller
{
[HttpGet("{id:string}", Name = "GetByIdRoute")]
public IActionResult GetById (string id)
{
var item = _items.FirstOrDefault(x => x.Id == id);
if (item == null)
{
return HttpNotFound();
}
return new ObjectResult(item);
}
}
当尝试访问此路径(example.com/api/Todo/key)作为字符串的键时,我在 startup.cs 中出现异常
浏览器中的异常显示:
System.InvalidOperationException 路由“api/Todo/{id:string}”上的约束条目“id”-“string”无法由“DefaultInlineConstraintResolver”类型的约束解析器解析。
代码中断的startup.cs部分是:
// Add MVC to the request pipeline.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
});
我似乎无法弄清楚为什么我不允许通过作为字符串的键获取项目。这甚至可能吗?如果是这样,我做错了什么?