如何从URL调用HTTP PUT?

时间:2015-08-07 09:59:04

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

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

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

  1. isEmailVerfied true
  2. DateOfVerification
  3. 我正在使用WebAPI和 HTTPPUT 操作来更新数据库。

    ControllerName是注册,我不希望用户点击任何额外的按钮进行更新,我想如果用户访问url,则应调用HTTPPut(或更新)操作并且链接为用户点击后无效。

1 个答案:

答案 0 :(得分:2)

我假设此场景中的操作流程是这样的:

  1. 用户在网页上填写表格
  2. 用户将表​​单提交到您的网络API后端
  3. 后端保存从表单提交的数据
  4. 后端会发送一封包含指向您的应用程序的链接的电子邮件
  5. 用户阅读电子邮件并点击链接
  6. 并且您希望此处的步骤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
    }