我使用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;
}
}
}
请帮助!
答案 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
不发布