ASP.NET Web API 5.2.3属性路由返回404

时间:2016-05-14 18:04:14

标签: c# asp.net asp.net-mvc asp.net-web-api

我有一个我正在研究的ASP.NET Web API项目。我有一个名为SpellbookController的APIController,它对EntityFramework存储库有基本的CRUD操作。

但是,当我尝试添加一个不是id的参数的方法时,我似乎无法正确路由它。

这是它的样子:

// GET: api/Spellbooks/user@email.com
[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();打开。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您的用户名参数在哪里?

你的电话应该是这样 -

 http://localhost:xxxx/api/Spellbooks/emailaddress/David

<强>更新

尝试将参数声明为字符串{username:string}

更新2

问题在于你的&#39;。&#39;正如你在link中看到的那样。 你可以在参数中没有点的情况下发送电子邮件,然后将ite替换回常规模式,或者你可以使用链接提供的所有好建议。

答案 1 :(得分:0)

如果您单步执行它,在查看username时是否获得了值?或者它总是空的?

如果您的路线不起作用,调试路线的一种简单方法是向http://localhost:xxxx/api/Spellbooks/?emailaddress=thisemailaddress发出请求,看看您是否可以获得回复。实际上,从REST标准来看,可以认为它是一个更清晰的路径,因为您将返回一组元素,而不是单个对象。