http post request sent from android to ashx in asp.net. cannot receive data

6.7k Views Asked by At

I am sending data from android to a Generic handler .ashx page in asp.net using http post. But the handler is not able to recieve data. The thing works with httpGet but not with httppost

The android code

package com.postApp;
/*
 * HTTP POST and BasicNameValuePair
 * */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class postAct extends Activity {
    /** Called when the activity is first created. */

    class login{
        public
        String uname;
        public String pass;

    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


            login l=new login();


        HttpClient client1 = new DefaultHttpClient();
        HttpPost request = new HttpPost("http://10.0.2.2:18089/POC_login/Handler.ashx");      


       l.uname="piyush";
       l.pass="gupta";
              List<NameValuePair> postParameters = new ArrayList<NameValuePair>(3);
            postParameters.add(new BasicNameValuePair("uname", l.uname));
            postParameters.add(new BasicNameValuePair("pass", l.pass));
       try {
            request.setEntity(new UrlEncodedFormEntity(postParameters));
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
            request.setEntity(formEntity);

          HttpResponse response;
          response = client1.execute(request);

         BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
         String line;
         String page="";
         line = in.readLine();
         while(line!=null)
         {
             page=page+line;
             line=in.readLine();
         }
         TextView tv = (TextView) findViewById(R.id.textview);
         tv.setText(page);
         in.close();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }                    
    }


}   

The ashx code

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Linq;

public class Handler : IHttpHandler {

    public void ProcessRequest (HttpContext context) 
    {
        context.Request.ContentType = "text/plain";
       // context.Request.ContentType = "text/html";


        string username=context.Request.QueryString["uname"];
        string password = context.Request.QueryString["pass"];
        context.Response.Write("Hello Piyush");

        NorthwindDataContext db = new NorthwindDataContext();
        var found = (from p in db.Catergories
                    where p.cat_ID == 1
                    select p.cat_name).SingleOrDefault();

    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

Please Help!

2

There are 2 best solutions below

0
On BEST ANSWER

The problem is likely due to incorrect handling of the content-type.

On the Android side, you should set the Content-type header, e.g.:

request.addHeader("Content-type", "application/x-www-form-urlencoded");
HttpResponse response;
response = client1.execute(request);

And then you should not override the content-type on your server, i.e. remove the following from ProcessRequest:

context.Request.ContentType = "text/plain";
// context.Request.ContentType = "text/html";

If you still have problems, be sure to check and make sure your server is configured to receive POSTs.

0
On

when u call ashx use GET

not POST