【问题标题】:DELETE request to Nancy from HTML从 HTML 向 Nancy 发出 DELETE 请求
【发布时间】:2015-10-30 06:55:58
【问题描述】:

我在Nancy 中实现了一个 REST API。我将 DELETE 用于以下端点:

Delete ["/usermanagement/{id}"] = parameters => {
            repo.DeleteUser(parameters.id);
            return Response.AsRedirect("/usermanagement");
        };

我想从我的简单 html 页面调用这个端点。到目前为止,我想出了这个解决方案:

<button type="button" onclick="deleteUserWithID('@Current.ID')">Delete</button></td>

和 JS:

<script>
    function deleteUserWithID( ID ){
      var xhr = new XMLHttpRequest();
      xhr.open( 'DELETE', 'usermanagement/' + ID, false );
      xhr.setRequestHeader( 'Content-Type', 'text/html' );
      xhr.send(null);
    }
</script>

这工作,只要达到一个端点,做业务逻辑。问题是它不会返回AsRedirect("/usermanagement"); 即:它不会重新加载页面。我试图在没有上述任何 JS 的情况下直接从 POSTMAN 执行此端点,并且我得到了预期的 html (/usermanagement) 页面。

有没有人遇到过类似的问题?上面的 JS 可能有什么问题,它导致 Nancy 在从浏览器执行时不返回 /usermanagement 页面(通过 POSTMAN 执行时返回此页面)?试了好几个浏览器,都没有结果。

【问题讨论】:

    标签: c# xmlhttprequest nancy


    【解决方案1】:

    浏览器重定向不像 AJAX 那样工作(即XMLHttpRequest)。如果您检查xhr.responseText 属性,我想您会发现它包含/usermanagement 页面的HTML。但是,如果您想真正将浏览器重定向到该页面,您应该通过 JavaScript 进行:

    function deleteUserWithID( ID ){
      var xhr = new XMLHttpRequest();
      xhr.open( 'DELETE', 'usermanagement/' + ID, true );
      xhr.setRequestHeader( 'Content-Type', 'text/html' );
      xhr.onreadystatechange = handleResponse;
      xhr.send(null);
    }
    function handleResponse(e) {
      if (this.readyState == 4) {
        if (this.status == 200) {
          location.href = "/usermanagement";
        }
      }
    }
    

    【讨论】:

    • @ChristianHorsdal - XMLHttpRequest 将跟随重定向,因此最终状态码将为 200。
    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多