我正在尝试为我的网站创建一个API,到目前为止它已经使用了GET和POST方法,但DELETE方法,我只是不能让它工作。我知道很多人都有这个问题,但我无法找到解决方案。如果有人可以帮助我,谢谢!
PS:为了清楚起见,我没有在Windows Server上安装WebDav模块。
这是我的index.php:
<?php
require_once("DB.php");
$db = new DB("127.0.0.1", "SocialNetwork", "username", "pass");
if ($_SERVER['REQUEST_METHOD'] == "GET") {
if ($_GET['url'] == "auth") {
} else if ($_GET['url'] == "users") {
}
} else if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_GET['url'] == "auth") {
$postBody = file_get_contents("php://input");
$postBody = json_decode($postBody);
$username = $postBody->username;
$password = $postBody->password;
if ($db->query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {
if (password_verify($password, $db->query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) {
$cstrong = True;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong));
$user_id = $db->query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
$db->query('INSERT INTO login_tokens VALUES (0, :token, :user_id)', array(':token'=>sha1($token), ':user_id'=>$user_id));
echo '{ "Token": "'.$token.'" }';
} else {
http_response_code(401);
}
} else {
http_response_code(401);
}
}
} else if ($_SERVER['REQUEST_METHOD'] == "DELETE") {
if ($_GET['url'] == "auth") {
if (isset($_GET['token'])) {
$db->query('DELETE FROM login_tokens WHERE token=:token', array(':token'=>$_GET['token']));
echo '{ "Status": "Success" }';
http_response_code(200);
} else {
http_response_code(400);
echo '{ "Error": "Mal-formed request" }';
}
}
} else {
http_response_code(405);
}
?>
这是我的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="API">
<match url=".*" />
<action type="Rewrite" url="index.php?url={R:0}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
<security>
<requestFiltering>
<verbs allowUnlisted="false">
<add verb="GET" allowed="true" />
<add verb="POST" allowed="true" />
<add verb="DELETE" allowed="true" />
<add verb="PUT" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>