我在我的应用程序中使用Alamofire。这是我的Alamofire请求代码
let params: [String:AnyObject] = ["email": self.signin_Email.text!, "password": self.signin_Password.text!]
Alamofire.request(.GET, "http://DomainName/api/App/Sign_Up", parameters: params, encoding:.JSON)
.responseJSON { response in
debugPrint(response)
}
当我放debugPrint(reponse)
时
我得到的是这个
[请求]:{URL: http://Domain/api/App/Sign_Up} [回复]:无[数据]: 0字节[结果]:FAILURE:错误域= NSURLErrorDomain代码= -1017 “无法解析响应”UserInfo = {NSUnderlyingError = 0x7ffe0840e700 {错误域= kCFErrorDomainCFNetwork代码= -1017“(null)” UserInfo = {_ kCFStreamErrorCodeKey = -1,_kCFStreamErrorDomainKey = 4}}, NSErrorFailingURLStringKey = http://Domain/api/App/Sign_Up, NSErrorFailingURLKey = http://Domain/api/App/Sign_Up, _kCFStreamErrorDomainKey = 4,_kCFStreamErrorCodeKey = -1,NSLocalizedDescription =无法解析响应}
我总是将响应状态设为失败。我无法弄清楚发生了什么。 (使用mvc4作为后端)。 这是接受上述请求并返回JSON数据的Api方法
[System.Web.Http.HttpGet]
public JsonResult Sign_Up(string email,string password)
{
email = email;
password = password;
System.Web.Mvc.JsonResult usertoreturn = new System.Web.Mvc.JsonResult();
SignUpViewModel signupviewmodel = new SignUpViewModel();
usermodeltocheck.SetPassword(password);
usermodeltocheck.MembershipDate = DateTime.Now;
usermodeltocheck.IsMember = true;
usermodeltocheck.PublicKey = Guid.NewGuid().ToString("N");
usermodeltocheck.MembershipStatus = true;
usertoreturn.Data = Helper.UpdateUser(usermodeltocheck);
}
usertoreturn.JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet;
return usertoreturn;
}
UPDATE#1 我创建了一个名为 test 的新方法,它接受一个参数。该方法只返回参数值。我尝试了{{{}中提供的示例代码3}}及其工作。如果我在Alamofire请求方法中避免参数参数,我能够得到适当的响应。喜欢
Alamofire.request(.GET, "http://DomainName/api/App/Test", encoding: .JSON).responseJSON{
response in
debugPrint(response)
}
这里我得到了一个SUCCESS响应。我已经更新了我的代码
Alamofire.request(.GET, "http://DomianName/api/App/Test?test=testing", encoding: .JSON).responseJSON{
response in
debugPrint(response)
}
这里我也获得了SUCCESS响应。将参数值传递给参数参数 parameters: ["test":"testing"]
时发生错误。
我也设置了这样的参数
let params = ["test":"testing"]
Alamofire.request(.GET, "http://DomianName/api/App/Test", parameters : params ,encoding: .JSON).responseJSON{
response in
debugPrint(response)
}
这样我也得到了对失败
的回应答案 0 :(得分:5)
可能它不是你正在寻找的答案但是我从Alamofire请求方法中删除参数就行了。这是改变:
let params : [String:AnyObject] = ["email":self.signin_Email.text!,"password":self.signin_Password.text!]
let request = Alamofire.request(.GET, "http://DomianName/api/App/Sign_Up", parameters: params).responseJSON{
response in
switch response.result{
case .Success(let data) :
let json = JSON(data)
print(json)
case .Failure(let error):
print("Error : \(error)" )
}
}
我已从我的Alamofire请求方法参数列表中删除了encoding:.JSON
,并且它已经...
答案 1 :(得分:0)
尝试使用以下内容打印response
中的所有数据:
let URLString = "http://DomainName/api/App/Sign_Up"
Alamofire.request(.GET, URLString, parameters: params, encoding:.JSON)
.responseJSON { response in
debugPrint(response)
}
打印出来后,如果您可以更新问题,我们可以提供更多帮助。之后我会相应地更新我的答案。
好的,NSURLErrorDomain Code=-1017
指出您的服务器很可能行为不端。您是否能够成功使用cURL,Postman,Paw或其他一些HTTP客户端来使用该服务?一旦你得到其中一个工作,你应该在`request object上使用debugPrint
进行比较。
let URLString = "http://DomainName/api/App/Sign_Up"
let request = Alamofire.request(.GET, URLString, parameters: params, encoding:.JSON)
.responseJSON { response in
debugPrint(response)
}
debugPrint(request)
这将显示请求的cURL命令。
答案 2 :(得分:0)
我知道这有点旧,但我偶然发现了这个寻找其他东西。从我所看到的情况来看,我倾向于在这种情况下出现错误,任何时候params被传递为JSON编码的.GET而不是.POST
更改服务器以获取URI的帖子会使一切正常流动,我认为理论上这是正确的行为,因为如果您没有在URL中传递值,那么您在技术上将JSON发布到终点。