【问题标题】:status code 405 issue..Alamofire POST request...状态码 405 问题..Alamofire POST 请求...
【发布时间】:2018-01-05 05:58:57
【问题描述】:

我正在尝试发出 Alamofire POST 请求。这就是我提出请求的方式..

     Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding(destination: .queryString), headers : headers)
        .responseString { response in
            print(response.result)
 }

虽然我得到的结果是“SUCCESS”,但状态码始终显示为 405,而它应该是 200。在请求的“编码”部分,我尝试了 JSONEncoding.default、JSONEncoding 之类的所有方法。 prettyPrinted、URLEncoding.httpbody ......但状态码始终是 405。有人可以帮忙吗?在此先感谢...

【问题讨论】:

  • 我为您的问题提供答案,可能是后端问题

标签: ios swift post alamofire http-status-code-405


【解决方案1】:

这是此问题的解决方案...必须进行一些更改..

给出的标题是这样的:let headers = [ "Content-Type" : "application/json"]。但它必须让 headers = ["Content-Type":"application/x-www-form-urlencoded"]。 编码也应该以 URLEncoding.httpBody 的形式给出。

进行这些更改使其工作正常...

【讨论】:

    【解决方案2】:

    我认为问题出在您的服务器上,因为此状态代码仅在服务器禁用 api 时出现

    HTTP 405 Method Not Allowed 响应状态代码表示 服务器知道请求方法,但已禁用,并且 不能使用。 GET 和 HEAD 这两个强制方法绝不能 已禁用,不应返回此错误代码。

    所以请联系您的服务器(后端开发人员),确保您的网址正确

    【讨论】:

    • 我很确定您的网址是从移动端发布的错误,在网址末尾附加带有“/”的网址,然后重试
    • 那么只有一个选择,请发布您的网址和参数
    • 该网址在没有“/”的邮递员中工作正常。但是如果在代码中没有附加“/”,那么它给出的状态码是500而不是405..
    • 你能更新你的 OP 中的URL 吗?因为这是找到问题并解决问题的唯一有用线索! @Jaydeep 是对的。
    • 需要ssl证书
    【解决方案3】:

    我也遇到过同样的问题。 API 端点在 Android Retrofit 上运行良好,也用 PostMan 进行了测试。标头的 Content-Type 也是 application/json。 这真是一个奇怪的错误。我用 Fiddler 来检查响应。 错误消息是

    请求的资源不支持 http 方法 'T'/'ST'。

    我使用了 GET/POST 方法,但它说我使用的是 T/ST,而不是 GET/POST

    我从 Alamofire 的问题中找到了答案。

    当我调用不带参数的 API 端点时,我使用了空白字典作为参数。

    Alamofire.request("URL", 方法:.get, 参数: [:], 编码:JSONEncoding.default).responseString(completionHandler:completionHandler)

    我把它改成了nil

    Alamofire.request("URL", 方法:.get, 参数:无, 编码:JSONEncoding.default).responseString(completionHandler:completionHandler)

    之后,它运行良好。 希望它会帮助你。干杯!

    【讨论】:

      【解决方案4】:

      尝试替换:

      responseStringresponseJSONURLEncoding(destination: .queryString)URLEncoding.default

      喜欢:

      Alamofire.request(strURL, method: .post, parameters: params, encoding: URLEncoding.default, headers: headers).responseJSON { (responseObject) -> Void in 
      
      //Do something
      
      }
      

      【讨论】:

      • 尝试在我的函数中打印responseObject.result.value。我已经测试了这个功能超过 100 次。
      • 打印 responseObject.result.value 给出 'nil'。仅供参考..该网址在邮递员中工作正常..
      猜你喜欢
      • 2017-05-03
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2013-03-03
      • 2016-11-11
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多