C#登录到非交互式网站并通过URL传递XML

C#登录到非交互式网站并通过URL传递XML,c#,asp.net,xml,webrequest,C#,Asp.net,Xml,Webrequest,好吧,这就是我所拥有的,我可能完全错了,但我需要比我在网上找到的更多的方向 我试图传递一个包含登录信息的URL,然后在同一连接中传递另一个包含我的XML的URL。仅此而已,我似乎无法让它发挥作用。请帮忙 这是我的密码 using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Xml; using System.Net; using System.IO; usi

好吧,这就是我所拥有的,我可能完全错了,但我需要比我在网上找到的更多的方向

我试图传递一个包含登录信息的URL,然后在同一连接中传递另一个包含我的XML的URL。仅此而已,我似乎无法让它发挥作用。请帮忙

这是我的密码

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Xml;
using System.Net;
using System.IO;
using System.Configuration;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data;
using System.ComponentModel;
using System.Collections.Specialized;

namespace DataIntegration.DataSender
{
class RaveDataSender
{
    static void Main(string[] args)
    {

        System.Uri myUri = new System.Uri(@"https://api.myloginpage.com/edc_studyservices.jsp?action=importfile&filecontents=<?xml version='1.0'?><dataprocessitems><item>someitem</item></dataprocessitems>&filename=1.xml");
        System.Uri loginUri = new System.Uri(@"https://api.myloginpage.com/login.jsp?studyid=something&action=login&login=myLoginName&password=myPassword");
        byte[] mybytes = Encoding.ASCII.GetBytes("https://api.myloginpage.com/edc_studyservices.jsp?action=importfile&filecontents=<?xml version='1.0'?><dataprocessitems><item>someitem</item></dataprocessitems>&filename=1.xml");
        byte[] loginbytes = Encoding.ASCII.GetBytes(@"https://api.myloginpage.com/login.jsp?studyid=something&action=login&login=myLoginName&password=myPassword");
        CookieAwareWebClient client = new CookieAwareWebClient();

        client.UploadDataAsync(loginUri, loginbytes);
        client.UploadDataAsync(myUri, mybytes);

        client.Dispose();


    }

    public class CookieAwareWebClient : WebClient
    {
        private CookieContainer cookie = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = cookie;
            }
            return request;
        }
    }


    }
}

我认为问题可能是您在异步方法仍在运行时处理了对象。

所以这里的次要问题是,您是否以明文形式传递用户名和密码。。?哇,我不会那样做。。如果您有一个具有登录页面的web应用程序,请在验证后从那里处理重定向。不要将此类信息存储在URL中。感谢您注意到这一点。显然,这里的值不是真实的。幸运的是,这是给出的规范,以及我被指示如何处理此集成。但是,是的,你在这里向唱诗班布道。哇,这不是一个好办法。。也许他们不知道这样做会使自己暴露在…
client.Dispose()
-不要这样做。。。直到你的上传完成。。。重写事件处理程序UploadDataCompleted,如果确实需要,在那里处置客户端。否则,在你真的、真的完成之前,你只需抓住那个家伙(处置可能会很昂贵,LOL)好吧,所以我将client.UploadDataAsync改为client.UploadData,这就解决了问题。我还发现,实际的客户没有给我的帐户写访问权限,所以它可能以前工作过,我永远也不会知道。谢谢你的帮助。如果你把答案贴出来,我可以把它标记为正确的。
 using (var client = new CookieAwareWebClient()) 
        {
            byte[] authresp = client.UploadData(loginUri, loginbytes);
            byte[] dataRespose = client.UploadData(xmlUri, reqbytes);

            string authResult = System.Text.Encoding.UTF8.GetString(authresp);
            string result = System.Text.Encoding.UTF8.GetString(dataRespose);
            client.Dispose();
        }