【问题标题】:ASP.NET Web API 5.2.3 Attribute Route returning 404ASP.NET Web API 5.2.3 属性路由返回 404
【发布时间】:2016-05-14 18:04:14
【问题描述】:

我正在处理一个 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();

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    你的用户名参数在哪里?

    你的电话应该是这样的-

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

    更新

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

    更新 2

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

    【讨论】:

    • 抱歉,emailaddress 是我说的参数,因为他们的用户名是他们的电子邮件地址。
    • 所以我想我称之为localhost:xxxx/api/Spellbooks/test@test.com。这有帮助吗?
    • 尝试使用简单的字符串,看看会发生什么。电子邮件作为字符串可能存在问题。
    • 就是这样!有没有办法将电子邮件地址作为字符串发送?
    • @AlexKibler,我刚刚添加了更新,第一次更新解决了你的问题吗?所以我将删除更新 2 部分...
    【解决方案2】:

    如果单步执行,查看username 时是否得到值?还是总是为空?

    如果您的路由不起作用,调试路由的一种简单方法是向http://localhost:xxxx/api/Spellbooks/?emailaddress=thisemailaddress 发出请求,看看您是否能得到响应。事实上,从 REST 标准来看,可以说它是一条更干净的路线,因为您将返回一个元素集合,而不是单个对象。

    【讨论】:

    • 无法通过。抛出 404 的是 ASP.NET。但是,我最终只是切换到了 UserId 而不是用户名,而且效果很好。
    • 所以,基本上,没有被击中的是这条路线?
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    相关资源
    最近更新 更多