ASP.NET Web API 5.2.3属性返回的路由404
问题描述:
我有一个正在处理的ASP.NET Web API项目。我有一个名为SpellbookController的APIController,它对EntityFramework存储库有基本的CRUD操作。ASP.NET Web API 5.2.3属性返回的路由404
然而,当我尝试添加需要一个参数,这不是一个ID的方法,我似乎无法将其正确到达的路线。
这里是什么样子:
// GET: api/Spellbooks/[email protected]
[ResponseType(typeof(List<Spellbook>))]
[Route("api/Spellbooks/{username}")]
public IHttpActionResult GetSpellbook(string username)
{
List<Spellbook> spellbooks = db.Spellbooks.Where(x=>x.Username == username).ToList();
if (spellbooks == null)
{
return NotFound();
}
return Ok(spellbooks);
}
所以我想打http://localhost:xxxx/api/Spellbooks/emailaddress, 但每次都遇到了404。
这绝对是一个APIController,我有config.MapHttpAttributeRoutes();
打开。
我错过了什么?
答
你的用户名参数在哪里?
你调用应该看起来像这个 -
http://localhost:xxxx/api/Spellbooks/emailaddress/David
更新
试图声明的参数作为字符串{username:string}
更新2
问题是与你''正如你在这个link中看到的那样。 您可以发送电子邮件,而不需要参数中的参数,然后将ite替换回常规模式,或者您可以使用链接提供的所有好建议。
答
如果你通过它一步,你看username
时获得的价值?还是总是空?
如果您的路线不工作,一个简单的方法来调试的路线是主动要求http://localhost:xxxx/api/Spellbooks/?emailaddress=thisemailaddress
,看看你是否能得到回应。事实上,从REST标准来看,它可以认为它是一个更干净的路由,因为你将返回一组元素,而不是单个对象。
噢,对不起,'emailaddress'是我在谈论的参数,因为他们的用户名是他们的电子邮件地址。 –
所以我想我称之为http:// localhost:xxxx/api/Spellbooks/[email protected]。 这有帮助吗? –
试着用简单的字符串来做,看看会发生什么。也许电子邮件存在字符串问题。 –