2012-04-10 13 views
5

Sono sicuro che a questo deve essere stata data risposta prima ma non riesco a trovare una soluzione, quindi immagino che probabilmente fraintendiamo le soluzioni di altre persone o provando a fare qualcosa di stupido, ma qui andiamo .C# Apre la pagina web nel browser predefinito con i dati del post

Sto scrivendo un componente aggiuntivo per Outlook 2010 in C# in cui un utente può fare clic su un pulsante nella barra multifunzione e inviare i contenuti della posta elettronica a un sito Web. Quando fanno clic sul pulsante, il sito Web deve essere aperto nel browser predefinito, consentendo così di esaminare ciò che è appena stato inviato e interagire con esso sul sito web. Sono in grado di farlo usando querystrings nell'URL utilizzando:

System.Diagnostics.Process.Start("http://www.test.com?something=value"); 

ma il limite sulla quantità di dati che possono essere presentate e gli URL disordinato mi impediscono di seguire attraverso con questo approccio. Mi piacerebbe utilizzare un post http per questo come è ovviamente più adatto. Tuttavia, i metodi che ho trovato per fare questo non sembrano aprire la pagina nel browser dopo aver presentato i dati POST:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

a riassumere; l'utente deve essere in grado di fare clic sul pulsante nella barra multifunzione, aprire il browser Web e visualizzare i contenuti dell'e-mail che sono stati inviati per posta.

EDIT:

Destra, ho trovato un modo per farlo, la sua bella fugly ma funziona! Basta creare un file .html temporaneo (che viene quindi lanciato come sopra) contenente un modulo con campi nascosti per tutti i dati, e averlo inviato al caricamento della pagina con javascript.

Non mi piace questa soluzione in quanto si basa su javascript (ho un pulsante di invio appena incassato) e sembra un po 'un bodge, quindi sto ancora sperando davvero che qualcuno qui si inventerà qualcosa di meglio .

risposta

2

Non sono sicuro che avrei costruito la soluzione in questo modo. Invece, vorrei postare tutti i dati su un servizio web (usando HttpWebRequest, come descritto @Loci, o semplicemente importando il servizio usando Visual Studio), che memorizzerebbe i dati in un database (magari con uno stato di attesa). Quindi indirizza l'utente (utilizzando il tuo approccio Process.Start) a una pagina che visualizza il ticket di guida in sospeso, che consentirebbe loro di approvare o eliminare il ticket.

Sembra un po 'più di lavoro, ma dovrebbe pulire l'architettura di ciò che si sta tentando di fare. Inoltre, hai l'ulteriore vantaggio di non preoccuparti di come attivare un post del modulo dal lato client.

Edit:

Un plain ASMX web service dovrebbe almeno iniziare. È possibile fare clic con il tasto destro del mouse sul progetto e selezionare Aggiungi riferimento servizio per generare il codice proxy per chiamare il servizio.

+0

Grazie! ma questo, purtroppo, è al di là di me al momento. Farò qualche ricerca e vedrò se riesco a far funzionare qualcosa del genere e pubblicare i miei risultati. – Ben

+0

Aggiornato la mia risposta. – mgnoonan

+0

Buone notizie! questo non è più al di là di me quindi ho accettato la tua risposta (4 anni di ritardo)! – Ben

2

Il client Dropbox esegue le stesse modalità menzionate nell'EDIT. Ma fa anche qualche offuscamento, cioè XOR i dati con l'hash inviati tramite l'URL.

Ecco i passaggi come Dropbox lo fa:

  1. in-app: creare un token che può essere utilizzato per autorizzare in dropbox.com.
  2. in-app: converti token in stringa esadecimale (A).
  3. in-app: crea una stringa esadecimale casuale protetta (B) della stessa lunghezza.
  4. in-app: Calcolare c = a XOR B.
  5. in-app: creare file HTML temporaneo con le seguenti funzionalità:
    1. Un campo di input nascosto che contiene il valore B.
    2. A presentare il modulo con campi di input nascosti necessari per accedere a dropbox.com.
    3. Una funzione JS che legge l'hash dall'URI, esegue XOR con B e scrive il risultato nei campi nascosti dei moduli di invio.
    4. Elimina hash dall'URI.
    5. Invia modulo.
  6. in-app: aprire il file HTML temporaneo con il browser standard e aggiungere C come hash alla fine dell'URI.

Ora se il browser apre il file HTML, calcola il token di autenticazione dal campo di input nascosto e l'hash nell'URI e apre dropbox.com. E a causa del punto 5.4. non si è in grado di premere il pulsante Indietro nel browser per accedere nuovamente perché l'hash è andato.

Problemi correlati