【问题标题】:Alamofire returning status Failure AlwaysAlamofire 返回状态总是失败
【发布时间】:2016-02-07 13:20:07
【问题描述】:

我在我的应用程序中使用 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字节[结果]:失败:错误域=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 的新方法,它接受一个参数。该方法只返回参数值。我尝试了@987654324 中提供的示例代码@ 及其工作。如果我在 Alamofire 请求方法中避免参数参数,我能够得到正确的响应。喜欢

Alamofire.request(.GET, "http://DomainName/api/App/Test", encoding: .JSON).responseJSON{
                    response in
                debugPrint(response)

                }

在这里我得到了一个成功的响应。我已经像这样更新了我的代码

Alamofire.request(.GET, "http://DomianName/api/App/Test?test=testing", encoding: .JSON).responseJSON{
                    response in
                debugPrint(response)

                }

在这里我也得到了成功的响应。当我将参数值传递给参数 parameters parameters: ["test":"testing"] 时发生错误。 我也这样设置参数

let params = ["test":"testing"]
 Alamofire.request(.GET, "http://DomianName/api/App/Test", parameters : params ,encoding: .JSON).responseJSON{
                        response in
                    debugPrint(response)

                    }

通过这种方式,我也收到了对 FAILURE

的回复

【问题讨论】:

    标签: api swift2 alamofire


    【解决方案1】:

    它可能不是您正在寻找的答案,但对我来说,从 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,就是这样......

    【讨论】:

    • 那么为什么它不能使用 encoding: .JSON in parameter list 呢?任何想法? @cnoon
    • 我猜你的服务器不支持 JSON 编码。并非所有服务都可以。您需要阅读有关该特定服务的文档或与构建它的工程团队交谈。
    • 我们正在使用我们的本地服务器进行应用程序测试。所以这可能是问题吧?
    • 帮我删除了编码:.JSON
    • @Eduardo 很高兴听到它对您也有帮助... :)
    【解决方案2】:

    我知道这有点老了,但我偶然发现了这个,正在寻找其他东西。据我所见,在这种情况下,每当参数作为用 .GET 而不是 .POST 编码的 JSON 传递时,我往往会出错

    更改服务器以获取 URI 的帖子会使一切正常流动,我猜理论上这是正确的行为,因为如果您没有在 URL 中传递值,那么从技术上讲,您是在将 JSON 发布到端点.

    【讨论】:

      【解决方案3】:

      尝试使用以下命令打印出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 对象上使用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 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-09
        • 2018-02-25
        • 2018-05-22
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        相关资源
        最近更新 更多