Веб-API не отвечает на приложение iOS

avatar
Hassan Shahbazi
8 апреля 2018 в 06:06
353
0
0

У меня есть действие веб-API ASP.NET, которое вызывается определенным приложением на устройствах iOS. Он отлично работает, когда он открыт в браузерах как на смартфонах, так и на настольных компьютерах. Однако приложение для смартфона не получает никакого ответа при вызове с httpMethod = GET. А если я изменю iOS и сервер httpMethod на POST, все будет работать как задумано.

Код сервера:

[HttpGet("{uuid}")]
public async Task<ConfigurationProfileDto> Get([FromRoute]string uuid)
{
    if (string.IsNullOrWhiteSpace(uuid))
        return null;
    var smartphone = _SmartphoneService.GetAll().FirstOrDefault(p => p.Uuid == uuid && p.StatusId == Data.Entities.SmartphoneStatusEnum.Active);
    if (smartphone == null)
    {
        return null;
    }
    var profileDto = new ConfigurationProfileDto(smartphone.User.ConfigurationProfile);
 
    return profileDto;
}

Код iOS:

public func requestSend() {
        delegate?.managerDidStartLoading?(request: self.requestObject)
        requestInitialization()
        sessionInitialization()

        let task = session?.dataTask(with: request!  completionHandler: { data, response, error in
        if error != nil {
            self.delegate?.managerDidFailed(description: error!.localizedDescription, request: self.requestObject)
            return
        }
        if let status = response as? HTTPURLResponse {
            if status.statusCode == 200 {
                self.delegate?.managerDidSuccessed(request: self.requestObject)
                if let json = try? JSONSerialization.jsonObject(with: data!  options: []) {
                    self.delegate?.managerDidReceived?(data: json, request: self.requestObject!)
                }
            }
            else {
                self.delegate?.managerDidFailed(description: "Server returns code \(status.statusCode)", request: self.requestObject)

            }
        }
    })
    task?.resume()
}

private func requestInitialization() {
    if let urlString = requestURL,
        let url = URL(string: urlString) {

        request = URLRequest(url: url)
        request?.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request?.addValue("application/json", forHTTPHeaderField: "Accept")
        request?.httpMethod = "GET"
        request?.timeoutInterval = 120

        do {
            request?.httpBody = try JSONSerialization.data(withJSONObject: requestParameter!  options: .prettyPrinted)
        }
        catch let error {
            delegate?.managerDidFailed(description: error.localizedDescription, request: self.requestObject)
        }
    }
    else {
        delegate?.managerDidFailed(description: "insufficent request parameters", request: self.requestObject)
    }
}

Заголовок ответа:

transfer-encoding: chunked
content-type: application/json; charset=utf-8
server: Kestrel
date: Sun, 08 Apr 2018 05:23:44 GMT

Почему это не работает с httpMethod = GET?

Источник
Nkosi
8 апреля 2018 в 13:11
1

запрос GET не принимает BODY, в то время как POST/PUT принимает. Проблема заключается в том, как вы делаете запрос от клиента iOS. Если делать GET-запрос, то httpBody не может быть

Hassan Shahbazi
9 апреля 2018 в 07:25
0

@Nkosi Отлично, спасибо. Теперь это исправлено!

Ответы (0)