Alamofire返回状态失败始终

时间:2015-11-06 11:42:22

标签: api swift2 alamofire

我在我的应用程序中使用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)

                    }

这样我也得到了对失败

的回应

3 个答案:

答案 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)
    }

打印出来后,如果您可以更新问题,我们可以提供更多帮助。之后我会相应地更新我的答案。

更新#1

好的,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发布到终点。