我正在开发一个dart应用程序,它将使用我正在构建的REST服务。我开始编写dart代码来对我的登录端点执行ajax请求。但是,即使我的飞镖ajax请求失败,它也声称会成功。
我没有启动和运行任何服务(即使我这样做会使用错误的域/端口),但是这段代码每次都会提供200 OK HttpResponse:
class PlayerController {
const PlayerController();
static const String LOGIN_URL = "login";
void login(String username, String password) {
Map<String, String> headers = {"Content-Type": "application/x-www-form-urlencoded"};
String body = "j_username=$username&j_password=$password&submit=Login";
HttpRequest.request(LOGIN_URL, method: "POST", requestHeaders: headers, sendData: body)
.then((request) => processLogin(request, username))
.catchError((e) => processLoginError(e));
}
void processLogin(var whatIsThis, String username) {
query("#loginButton").text = "Logout";
//TODO get the player then set them
}
void processLoginError(var e) {
print("total failure to login because of $e");
}
}
它始终命中processLogin方法,并且永远不会命中processLoginError方法。有谁知道为什么会这样?我应该以不同的方式执行此ajax请求吗? (如果你无法猜测,它将签署春季安全保障)。
我在某处读到文件系统请求总是成功的。 Dart是否以某种方式将其作为文件系统请求而不是Web请求?
答案 0 :(得分:2)
这是因为请求实际上已成功完成。
您的“登录”请求实际上会调用http://127.0.0.1:6521/[Path_to_your_Dart_file]/login
在Dartium(127.0.0.1:6521)中运行时由Dart启动的服务器似乎应答了每个使用HTTP 200和空响应主体的POST请求。
如果将方法从POST更改为GET,则会按预期失败。
至于为什么服务器这样做 - 我真的不知道。这必须由Dart团队回答。