【问题标题】:Asp.net WebApi2 default routing not finding different named apis?Asp.net WebApi2默认路由找不到不同的命名api?
【发布时间】:2016-01-08 10:46:54
【问题描述】:

我有两个 WebApi2 动作,每个动作都可以单独工作:

[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> MigrateUser([FromBody] MigrateUserModel userInfo)

和

[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> ChangeEmail([FromBody] ChangeEmailModel model)

当它们都存在时,我都会收到 404 错误。我必须做什么才能找到 POST .../ChangeEmail 和 .../MigrateUser?有没有办法在没有明确的基于属性的路由的情况下做到这一点(会是什么?)。

以下 HttpGet 工作正常,不需要 Route()...

       [System.Web.Http.HttpGet]
    public async Task<TcMarketUserFullV1> GetIdmCtoUsrFromEmail(string email)

和

        [System.Web.Http.HttpGet]
    public async Task<TcMarketUserFullV1> GetIdmCtoUsrFromGuid(string ctoguid)

【问题讨论】:

  • 使用 Route() 属性区分两者。
  • 你建议 AttributeRouting 是唯一的方法? asp.net/web-api/overview/web-api-routing-and-actions/…
  • 是的,AttributeRouting就是这样,但我并不是说这是只有的处理方式,可能还有别的方式。
  • 你能分享你用来调用 HttpGet 的两个动作的 URL 吗?我只是想知道。
  • 以上更新。两者都使用最简单形式的 url 和查询参数作为“base-url/action-name?param=xyz”来解决。工作正常,这就是为什么我很惊讶地看到帖子/正文需要添加。

标签: c# asp.net asp.net-web-api2


【解决方案1】:

使用Route 属性来区分。每个动作。

[System.Web.Http.HttpPost,Route("migrate")]
public async Task<HttpResponseMessage> MigrateUser([FromBody] MigrateUserModel userInfo)

和

[System.Web.Http.HttpPost,Route("change")]
public async Task<HttpResponseMessage> ChangeEmail([FromBody] ChangeEmailModel model) 

【讨论】:

  • 谢谢。所以 Route("migrageuser") , Route("changeemail").
猜你喜欢
  • 2011-02-23
  • 2020-05-31
  • 2012-10-28
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多