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替换回常规模式,或者您可以使用链接提供的所有好建议。

+0

噢,对不起,'emailaddress'是我在谈论的参数,因为他们的用户名是他们的电子邮件地址。 –

+0

所以我想我称之为http:// localhost:xxxx/api/Spellbooks/[email protected]。 这有帮助吗? –

+0

试着用简单的字符串来做,看看会发生什么。也许电子邮件存在字符串问题。 –

如果你通过它一步,你看username时获得的价值?还是总是空?

如果您的路线不工作,一个简单的方法来调试的路线是主动要求http://localhost:xxxx/api/Spellbooks/?emailaddress=thisemailaddress,看看你是否能得到回应。事实上,从REST标准来看,它可以认为它是一个更干净的路由,因为你将返回一组元素,而不是单个对象。

+0

它无法跨越。它是扔404的ASP.NET。但是,我最终只是切换到UserId而不是用户名,这工作得很好。 –

+0

因此,基本上,这是没有受到打击的路线? – napo

+0

是的,没错 –