坚持使用httpwebrequest

时间:2012-06-04 14:42:30

标签: c# asp.net url httpwebrequest http-post

我对使用httpwebrequest感到有点困惑。我试图查看一些文章,但由于我第一次这样做而无法从中获得更多。以下是我正在尝试的代码,我几乎没有问题,

a)ASPX页面定义的控件很少,在代码隐藏中我创建了很少的控件。当我使用POST进行httpwebrequest时,是否需要考虑所有控件及其值?我只需要为其中一个控件执行POST。我可以只为那个控件做这件事吗?

b)应在“(HttpWebRequest)WebRequest.Create”中指定什么URL?我假设它是向用户显示的同一页面。例如,在下面的示例中,它是(“http://localhost/MyIdentity/Confirm.aspx?ID = New& Designer = True& Colors = Yes”);

c)我需要修改或处理标记或代码以实现httpwebrequest吗?

    private void OnPostInfoClick(object sender, System.EventArgs e)
{
    ASCIIEncoding encoding = new ASCIIEncoding();
    string postData =  ""; //Read from the stored array and print each element from the array loop here. 
    byte[] data = encoding.GetBytes(postData);

    // Prepare web request...
    HttpWebRequest myRequest =
      (HttpWebRequest)WebRequest.Create("http://localhost/MyIdentity/Confirm.aspx?ID=New&Designer=True&Colors=Yes");
    myRequest.Method = "POST";
    myRequest.ContentType = "application/x-www-form-urlencoded";
    myRequest.ContentLength = data.Length;
    Stream newStream = myRequest.GetRequestStream();
    // Send the data.
    newStream.Write(data, 0, data.Length);
    newStream.Close();
}

1 个答案:

答案 0 :(得分:1)

通常只会将其用于服务器到服务器的通信(不一定是页面到页面的数据传输)。

如果我正确理解您的帖子和问题,您似乎只想将POST数据发送到ASP.Net应用程序中的其他页面。如果是这样,您可以这样做的一种方法是简单地更改提交按钮的PostBackUrl(表单目标)而不是正常的回发(到同一页面)。

还有其他方法,但这应该是最简单的。

<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="foo.aspx" />

在上面,POST将发送到foo.aspx,而不是POST回自身,您可以在那里检查/使用/处理POSTed数据。


根据您的评论进行更新:

您不必为此通过HttpWebRequest编写代码。普通的ASP.net WebForms模型可以帮到你。

鉴于这个简单的ASP.net Web表单页面:

<form id="form1" runat="server">

Coffee preference:
<asp:RadioButtonList ID="CoffeeSelections" runat="server" RepeatLayout="Flow" RepeatDirection="Horizontal">
   <asp:ListItem>Latte</asp:ListItem>
   <asp:ListItem>Americano</asp:ListItem>
   <asp:ListItem>Capuccino</asp:ListItem>
   <asp:ListItem>Espresso</asp:ListItem>
</asp:RadioButtonList>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

....
</form>

你的内联或代码背后会是这样的:

protected void Page_Load(object sender, EventArgs e)
{
   //do whatever you want to do on Page_Load
}


protected void Button1_Click(object sender, EventArgs e)
{
   //handle the button event
   string _foo = CoffeeSelections.SelectedValue;
   ...
}