【问题标题】:How to invoke HTTP PUT from URL?如何从 URL 调用 HTTP PUT?
【发布时间】:2015-08-07 09:59:03
【问题描述】:

场景:- 我有一个表单,一旦用户提交此表单,就会向用户发送一封邮件。 与往常一样,激活链接出现在邮件正文中。

如果用户点击链接,他会被重定向到页面,现在在访问 url 时,我想更新我的数据库表中的字段:-

  1. isEmailVerfiedtrue
  2. 验证日期

我正在使用 WebAPI 和 HTTPPUT 操作来更新数据库。

ControllerName 是 Registration,我不希望用户点击任何额外的按钮来更新,我希望如果用户访问 url,应该调用 HTTPPut(或更新)操作并且链接是无效,一旦用户点击。

【问题讨论】:

  • 你现在在哪里坚持?使用 Javascript 或发送 Put 请求?
  • 太清楚了,当用户点击链接时,您是否尝试更新数据库中的某些字段?
  • 请注意,您不能在需要修改请求标头的 URL 中指定 httpmethod。所以你可以用提琴手来做到这一点,例如
  • @Mark..它没有命中 HTTPPut 动作

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


【解决方案1】:

我假设这个场景中的动作流程是这样的:

  1. 用户在网页上填写表单
  2. 用户向您的 Web api 后端提交表单
  3. 后端保存表单提交的数据
  4. 后端发送一封电子邮件,其中包含指向您的应用程序的链接
  5. 用户阅读电子邮件并点击链接

并且您希望此处第 5 步中的操作在您的后端触发一些其他操作,即更新您已经实现并在您的 api 中作为http PUT 方法公开的数据库中的一些数据。

问题在于,单击在浏览器中打开的电子邮件中的链接是您无法指定http 方法。在浏览器中导航到 URL,这就是你正在做的,是一个 GET 请求。所以你的PUT 操作永远不会受到打击。

要解决此问题,您只需将操作从 PUT 更改为 GET

改变这个:

[HttpPut]
[Route("verify/{hash}")
public void VerifyEmail(string hash){
   // your implementation logic
}

到这里:

[HttpGet]
[Route("verify/{hash}")
public void VerifyEmail(string hash){
   // your implementation logic
}

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 2016-03-24
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多