我想在C#桌面應用程序中使用ASP進行代碼生成。在ASP.NET中接收POST數據
爲了實現這一點,我設置了一個簡單的主機(從System.MarshalByRefObject派生),通過HttpRuntime.ProcessRequest處理System.Web.Hosting.SimpleWorkerRequest。這將處理傳入請求指定的ASPX腳本(使用System.Net.HttpListener等待請求)。
客戶端部分由構建System.Net.HttpWebRequest並從服務器接收響應的System.ComponentModel.BackgroundWorker表示。
的我的客戶部分代碼的簡化版本是這樣的:
private void SendRequest(object sender, DoWorkEventArgs e) { // create request with GET parameter var uri = "http://localhost:9876/test.aspx?getTest=321"; var request = (HttpWebRequest)WebRequest.Create(uri); // append POST parameter request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; var postData = Encoding.Default.GetBytes("postTest=654"); var postDataStream = request.GetRequestStream(); postDataStream.Write(postData, 0, postData.Length); // send request, wait for response and store/print content using (var response = (HttpWebResponse)request.GetResponse()) { using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) { _processsedContent = reader.ReadToEnd(); Debug.Print(_processsedContent); } } }
我的服務器部分的代碼看起來像這樣(沒有異常處理等):
public void ProcessRequests() { // HttpListener at http://localhost:9876/ var listener = SetupListener(); // SimpleHost created by ApplicationHost.CreateApplicationHost var host = SetupHost(); while (_running) { var context = listener.GetContext(); using (var writer = new StreamWriter(context.Response.OutputStream)) { // process ASP script and send response back to client host.ProcessRequest(GetPage(context), GetQuery(context), writer); } context.Response.Close(); } }
到目前爲止,只要我使用GET參數,所有這些都可以正常工作。但是當涉及到在我的ASPX腳本中接收POST數據時,我遇到了麻煩。爲了測試我使用下面的腳本:
// GET parameters are working: var getTest = Request.QueryString["getTest"]; Response.Write("getTest: " + getTest); // prints "getTest: 321" // don't know how to access POST parameters: var postTest1 = Request.Form["postTest"]; // Request.Form is empty?! Response.Write("postTest1: " + postTest1); // so this prints "postTest1: " var postTest2 = Request.Params["postTest"]; // Request.Params is empty?! Response.Write("postTest2: " + postTest2); // so this prints "postTest2: "
看來,我在ASP對付System.Web.HttpRequest對象不包含我的POST參數「後測」的任何信息。我在調試模式下對其進行了檢查,並且沒有一個成員包含參數名稱「postTest」和參數值「654」。我也嘗試了Request的BinaryRead方法,但不幸的是它是空的。這對應於Request.InputStream == null和Request.ContentLength == 0。爲了讓事情真的變得混亂,Request.HttpMethod成員被設置爲「GET」?!
要隔離問題,我使用PHP腳本代替ASPX腳本測試了代碼。這是非常簡單的:
print_r($_GET); // prints all GET variables print_r($_POST); // prints all POST variables
,其結果是:
Array ( [getTest] => 321 ) Array ( [postTest] => 654 )
與PHP腳本它的作品,我可以訪問POST數據左右。爲什麼ASPX腳本不?我在做什麼錯? Response對象中是否有特殊的訪問器或方法?
任何人都可以給出提示,甚至知道如何解決這個問題嗎?提前致謝。
您是否嘗試過使用Request [「postTest」]?這可能只是因爲它是一個帖子,它可能沒有被加載到Request.Form中。 – 2011-01-26 14:56:22