1

私は問題があります。投稿アクションを実行したいのですが、次のようにしています。

string post_data = string.Format("taskId={0}&inputId={1}&value={2}", taskId, inputId, "101");

string uri = "http://localhost:60837/Default.aspx";
// Create a request using a URL that can receive a post. 
        WebRequest request = WebRequest.Create(uri);
        // Set the Method property of the request to POST.
        request.Method = "POST";
        // Create POST data and convert it to a byte array
        var byteArray = Encoding.UTF8.GetBytes(post_data);
        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";
        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;
        // Get the request stream.
        Stream dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);
        // Close the Stream object.
        dataStream.Close();
        // Get the response.
        WebResponse response = request.GetResponse();
        // Display the status.
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd ();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

これは、私の default.aspx のコード動作です。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Caller.Process(Request.RawUrl, Request.QueryString, Request.UserHostAddress));
    }
}

私の Process メソッドは次のようになります。

    static public string Process(string query, NameValueCollection collection, string ip)
    {
        StringBuilder result = new StringBuilder();

        Func<string, bool> check = str =>
        {
            if (!collection.AllKeys.Contains(str))
            {
                result.AppendLine(string.Format("No {0} parameter. ", str));
                return false;
            }
            return true;
        };
        if (check(paramTaskId) && check(paramInputId) && check(paramValue))
        {
            result.Append("OK");
            Execute(query, collection, ip);
        }
        else
        {
            WriteLog(result.ToString(), query, ip);
        }

        return result.ToString();
    }

問題は、Deafault.aspx でパラメーターを取得できないことです。ブラウザで実行しているときは、すべて問題ありません。何が問題になるか知っていますか?前もって感謝します;)

4

1 に答える 1

1

ブラウザ メソッドを使用して、変数を渡しますGET(つまり、URL の一部として渡されたパラメータを使用します)。コードを使用して、あなたは通り過ぎていPOSTます。これらは 2 つの異なるものであり、サーバー側で処理する場合は異なる方法で処理されます。

Default.aspx のコードで変数を参照するときは、 、または url でRequest.QueryString渡されたパラメーターを特に参照するものを使用しています。GET経由POSTで渡された変数を取得するには、 を使用する必要がありますRequest.Form["varName"]

于 2012-11-12T19:48:54.673 に答える