HTTPPOST возвращает 404 ANDROID

Я пытаюсь отправить сообщение в объект json REST API, но я продолжаю получать ответ 404, но URL-адрес работает нормально. Может ли кто-нибудь сказать мне, почему это происходит?

Вот мой код:

new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {

                HttpPost request = new HttpPost(
                        "http://grpsvil-webservice.si2001.it/RestChannelApp.svc/CheckCoupon");
                // request.setHeader("Accept", "application/json");
                request.setHeader("Accept", "application/json");
                request.setHeader("Content-type", "application/json");

                try {
                    // Build JSON string
                    JSONStringer vehicle = new JSONStringer()
                            .object()
                            .key("CouponVerificationCode")
                            .value("adf")
                            .key("ApiKey")
                            .value("adfadf123")
                            .key("Token")
                            .value("fgsg342==")
                            .endObject();
                    Log.v("--", vehicle.toString());
                    StringEntity entity = new StringEntity(vehicle.toString());

                    request.setEntity(entity);

                    // Send request to WCF service
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpResponse response = httpClient.execute(request);
                    int resCode = response.getStatusLine().getStatusCode();
                    Log.v("--", response.getStatusLine().getStatusCode() + "");

                    if (resCode == 200) {

                        Toast.makeText(getApplicationContext(),
                                response.getStatusLine().getStatusCode() + "",
                                Toast.LENGTH_LONG).show();
                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(response.getEntity()
                                        .getContent()));
                        String line = "";
                        StringBuffer returnFromServer = new StringBuffer();

                        while ((line = in.readLine()) != null) {
                            returnFromServer.append(line);
                        }
                        // Toast what we got from server
                        Log.v("--", "!@# " + returnFromServer.toString());

                        if (entity != null) {
                            entity.consumeContent();
                        }

                    }
                } catch (Exception e) {
                    // TODO: handle exception
                }
                Intent i = new Intent(Splash.this, Login.class);
                startActivity(i);
                finish();
                return null;
            }

person Darko Petkovski    schedule 27.02.2014    source источник
comment
URL-адрес не работает. Я просто скопировал и вставил. В браузере. Вы можете просто подтвердить   -  person MDMalik    schedule 27.02.2014
comment
404 означает, что страница не найдена.   -  person Blackbelt    schedule 27.02.2014
comment
У меня URL-адрес @MDMalik отлично работает: S grpsvil-webservice.si2001.it/RestChannelApp.svc /Проверить купон   -  person Darko Petkovski    schedule 27.02.2014
comment
Он показывает, что конечная точка SERVICE не найдена.   -  person MDMalik    schedule 27.02.2014
comment
@MDMalik да, это должно показать, что я должен опубликовать свой json-объект, кажется, URL-адрес в порядке   -  person Darko Petkovski    schedule 27.02.2014
comment
@DarkoPetkovski не работает код??   -  person MDMalik    schedule 27.02.2014


Ответы (4)


Конечная точка не найдена.

Вероятно, вы пишете неправильный URL-адрес метода для этого API.

person Lucian Novac    schedule 27.02.2014

Если вы получите все WSDL с сайта http://grpsvil-webservice.si2001.it/RestChannelApp.svc?WSDL вы можете увидеть все операции, которые вы определили.

CheckCoupon там нет, НО есть CheckPromotionalCode.

Может быть тот?

person Enrichman    schedule 27.02.2014

URL-адрес возвращает 404, не найден. То, что он показывает какой-то причудливый текст ошибки в браузере, не означает, что код состояния 200 OK. Это ответ HTTP, который я получаю:

Status Code: 404 Not Found
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET,PUT,POST,DELETE
Age: 0
Cache-Control: private
Connection: Keep-Alive
Content-Length: 1565
Content-Type: text/html; charset=UTF-8
Date: Thu, 27 Feb 2014 14:58:03 GMT
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
access-control-allow-origin: *
x-powered-by: ASP.NET
person Mark Buikema    schedule 27.02.2014

Попробуйте отправить код подтверждения следующим образом

ArrayList<NameValuePair> parms = new ArrayList<NameValuePair>();
parms.add(new BasicNameValuePair("CouponVerificationCode", adf));
parms.add(new BasicNameValuePair("ApiKey", adfadf123));
parms.add(new BasicNameValuePair("Token", fgsg342==));

httppost.setEntity(new UrlEncodedFormEntity(parms));

Таким образом, ваш общий код будет

HttpPost request = new HttpPost(
                    "http://grpsvil-webservice.si2001.it/RestChannelApp.svc/CheckCoupon");
            // request.setHeader("Accept", "application/json");
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            try {
                ArrayList<NameValuePair> parms = new ArrayList<NameValuePair>();
                parms.add(new BasicNameValuePair("CouponVerificationCode", adf));
                parms.add(new BasicNameValuePair("ApiKey", adfadf123));
                parms.add(new BasicNameValuePair("Token", fgsg342==));
                request.setEntity(new UrlEncodedFormEntity(parms));
                request.setEntity(entity);

                // Send request to WCF service
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpResponse response = httpClient.execute(request);

                int resCode = response.getStatusLine().getStatusCode();
                Log.v("--", response.getStatusLine().getStatusCode() + "");
person MDMalik    schedule 27.02.2014