Dati POST da un file di testo (letto da un client desktop) a un server basato su ASP .NET

StackOverflow https://stackoverflow.com/questions/1204930

  •  05-07-2019
  •  | 
  •  

Domanda

Sto sviluppando un'applicazione client-server - il server è un'app Web ASP .NET.

Il client (un'app desktop) deve inviare i dati contenuti in un file di testo alla mia app web asp .net. I dati sarebbero di circa 100 KB, in formato testuale multilinea.

Qual è l'approccio migliore per inviare questi dati al server, dato che devo farlo ogni 10 minuti circa?

È stato utile?

Soluzione

Se il file è abbastanza piccolo da poterlo adattare facilmente in memoria (cosa che vorresti che fosse se lo stai inviando tramite POST) allora puoi semplicemente fare quanto segue:

string textFileContents = System.IO.File.ReadAllText( @"C:\MyFolder\MyFile.txt" );

HttpWebRequest request = (HttpWebRequest)WebRequest.Create( "http://www.myserver.com/myurl.aspx" );
request.Method = "POST";

ASCIIEncoding encoding = new ASCIIEncoding();

string postData = "fileContents=" + System.Web.HttpUtility.UrlEncode( textFileContents );

byte[] data = encoding.GetBytes( postData );

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

Stream dataStream = request.GetRequestStream();

dataStream.Write( data, 0, data.Length );

dataStream.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// do something with the response if required

Per quanto riguarda la lettura del lato server di testo, puoi semplicemente utilizzare Page.Request.Form [" fileContents " ]

Altri suggerimenti

Sono confuso; dici di volerlo come parametro POST, ma poi lo leggi da un'intestazione ...? Sarebbe il modulo per i campi postali tipici o solo il corpo della richiesta per i dati non elaborati ...

Per l'invio di campi modulo:

    NameValueCollection fields = new NameValueCollection();
    fields.Add("name1","some text");
    fields.Add("name2","some more text");
    using (var client = new WebClient())
    {
        byte[] resp = client.UploadValues(address, fields);
        // use Encoding to get resp as a string if needed
    }

Per inviare un file non elaborato (non come un modulo; solo il testo stesso), utilizzare UploadFile ; e per le intestazioni, utilizzare .Headers.Add .

Se il tuo metodo web utilizza HttpContext.Current.Request.Headers [" errorLog "] , l'applicazione client deve inviare questa intestazione http personalizzata quando esegue la richiesta. Si noti che le intestazioni http non sono pensate per inviare dati di grandi dimensioni.

Nell'applicazione client è possibile aggiungere un riferimento Web al servizio e utilizzare la classe proxy generata per sostituire GetWebRequest e aggiungi l'intestazione http personalizzata:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    var req = (HttpWebRequest)base.GetWebRequest(uri);
    var value File.ReadAllText("path_to_your_file");
    req.Headers.Add("errorLog", value);
    return (WebRequest)req;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top