以MVVM的方式从C#提交POST表单

本文关键字:提交 POST 表单 MVVM 方式 | 更新日期: 2023-09-27 17:59:25

我正在使用WebBrowser控件来自动管理网页。当我启动WPF应用程序时,它会显示ant允许我登录的网页。然后,我的应用程序开始执行一些自动任务,方法是转到一个页面,填写表单并提交(这是一个POST表单)。它以不同的值提交相同的表单约100次。

现在我的代码如下:

void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    var doc = (HTMLDocument) webBrowser1.Document;
    var form = doc.getElementById("theForm");
    SetValueOfFormInput(doc, "id", Foo.ID);
    SetValueOfFormInput(doc, "item1", Foo.Item1);
    SetValueOfFormInput(doc, "item2", Foo.Item2);
    form.all.item("submit").click();
}
private static void SetValueOfFormInput(HTMLDocument doc, string name, string value)
{
    var item = doc.all.item(name);
    item.setAttribute("value", value);
}

我可以用更好的方式做到这一点吗?我可以用MVVM的方式做到吗?

不,我不能修改网页来简化管理:-(

编辑:理想情况下,我可以做到这一点,而不必使用WebBrowser控件。该程序登录到网站并执行所有任务,而无需修改html页面

以MVVM的方式从C#提交POST表单

中的表单

为什么不使用WebClient或WebRequest类?对于web客户端,您可以使用UploadValues方法,该方法将完全执行您想要的操作(http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx)你也可以简单地添加apt类来使用cookie,这样你的登录将是"永久的"(http://stackoverflow.com/questions/1777221/c-using-cookiecontainer-with-webclient-class)

如果你想做更多的模型驱动,我会使用WebRequest(已经准备好了一个cookiecontainer),并有一些包含所需数据的类。这个将派生自一个类,该类可以将所有需要的属性序列化为一个简单的字符串,然后发布到服务器-AFAIK它与getter参数相同(param1=val1&param2=val2&…)所以基本上:

class Data : Postable { public string Param1{get;set;} public string Param2{get;set;} ...}
class Postable 
{ 
    public override string ToString() 
    { 
        StringBuilder ret = new StringBuilder();
        foreach(Property p in GetType().GetProperties())
        {
            ret.Append("{0}={1}&", p.Name, p.<GetValue>);
        }
        return ret.ToString();
    } 
}