从HTML中删除对Nancy的请求

时间:2015-08-06 23:27:26

标签: c# xmlhttprequest nancy

我在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");即:它不会重新加载页面。我试图直接从POSTMAN执行这个端点而没有任何上面的JS,我找回了预期的html(/usermanagement)页面。

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

1 个答案:

答案 0 :(得分: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";
    }
  }
}