http发送请求从android发送到asp.net中的ashx。无法接收数据

时间:2011-02-04 12:36:53

标签: asp.net android http-post ashx

我使用http post将数据从android发送到asp.net中的Generic handler .ashx页面。但处理程序无法接收数据。这个东西适用于httpGet但不适用于httppost

android代码

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();
        }                    
    }


}   

ashx代码

<%@ 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;
        }
    }

}

请帮助!

2 个答案:

答案 0 :(得分:1)

问题可能是由于对内容类型的处理不正确。

在Android方面,您应该设置Content-type标头,例如:

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

然后你不应该覆盖服务器上的内容类型,即从ProcessRequest中删除以下内容:

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

如果仍有问题,请务必检查并确保您的服务器已配置为接收POST。

答案 1 :(得分:0)

当你打电话给ashx时,请使用 GET

不发布