2015-06-12 6 views
5

Come si fa a fare riferimento allo HttpClient utilizzando un file project.json?
Voglio che entrambe le strutture funzionino: dnx451 e dnxcore50.Come devo fare riferimento a HttpClient per dnx451 e dnxcore50?

Ecco il mio tentativo corrente nel file project.json. (Ho rimosso le parti irrilevanti.)

{ 
    "dependencies": { 
    "Microsoft.Net.Http": "2.2.29", 
    "Microsoft.Net.Http.Headers": "1.0.0-beta4", 
    "System.Net.Http": "4.0.0-beta-22816" 
    }, 
    "frameworks": { 
    "dnx451": { 
     "frameworkAssemblies": { 
     "System.Net.Http": "4.0.0.0" 
     } 
    }, 
    "dnxcore50": { } 
    } 
} 

Alla scoperta delle dipendenze Io ho elencato è stato un procedimento per tentativi ed errori.

Con questo file project.json, contesto dnxcore50 risolve correttamente tutte le classi in questo esempio blocco di codice, ma non riesce a risolvere HttpRequestMessage, HttpMethod, e MediaTypeWithQualityHeaderValue con la dnx451 contesto:

var request = new HttpRequestMessage(HttpMethod.Get, "..."); 
request.Headers.Accept.Clear(); 
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/...")); 
var response = await client.SendAsync(request); 
var model = await response.EnsureSuccessStatusCode().Content.ReadAsAsync<SomeModel>(); 
+1

Vedere [questo] (http://stackoverflow.com/questions/27946798/httpclient-in-asp-net-5-0-not-found/27949353#27949353) –

+0

@YuvalItzchakov Che ha funzionato tutto nel dnx451 contesto tranne per il metodo di estensione 'ReadAsAsync' su' HttpContent'. È un membro della classe 'HttpContentExtensions' nello spazio dei nomi' System.Net.Http'. Qualche idea di quale assembly quadro o dipendenza ho bisogno per questo? A proposito, questo è di grande aiuto! –

+0

@YuvalItzchakov Con il tuo aiuto l'ho capito. Vedi la mia risposta. –

risposta

9

A partire dalla tempo di pubblicazione (11 giugno 2015) questa è la combinazione che ha funzionato per me sia per dnx451 sia per dnxcore50.

{ 
    "dependencies": { 
    "Microsoft.AspNet.WebApi.Client": "5.2.3" 
    }, 
    "frameworks": { 
    "dnx451": { 
     "frameworkAssemblies": { 
     "System.Net.Http": "4.0.0.0" 
     } 
    }, 
    "dnxcore50": { 
     "dependencies": { 
     "System.Net.Http": "4.0.0-beta-22816" 
     } 
    } 
    } 
} 
+0

Hai bisogno del riferimento per ogni quadro? Le dipendenze principali non si applicano a entrambi i framworks? Ho solo "System.Net.Http": "4.0.0-beta-23008" nelle dipendenze e questo si presenta come riferimento sia dnx451 che dnxcore50 nell'elenco dei progetti. – jonas

+0

@jonas Ho appena confermato che se fai quello che dici 'HttpClient' ** non sarà ** accessibile sia in dnx451 che in dnxcore50. Prova a scrivere il codice che lo utilizza in un progetto configurato come stai dicendo. –

+0

@Timothy Shields - Ho fatto proprio questo tranne che è Microsoft.Net.HttpClient e funziona perfettamente. –

0

Sto segnalando la risposta di Timothy come utile che mi guida lungo la strada giusta, ma questa domanda/risposta ha anche qualche mese. Da allora, ASP.NET5 ha RCed. Ecco ciò che funziona per me ora:

{ 
    "version": "1.0.0-*", 

    ... 

    "dependencies": { 
    "System.Runtime": "4.0.21-beta-23516", 
    "Newtonsoft.Json": "6.0.6", 
    "Microsoft.CSharp": "4.0.1-beta-23516", 
    "System.Net.Http": "4.0.1-beta-23516" 
    }, 
    "frameworks": { 
    "dnx451": { 
     "dependencies": { 
     } 
    }, 
    "dnxcore50": { 
     "dependencies": { 
     } 
    } 
    } 
} 

che sembra essere simile con questo modo più dettagliato di specificare le dipendenze:

{ 
    "version": "1.0.0-*", 

    ... 

    "dependencies": { 
    "System.Runtime": "4.0.21-beta-23516", 
    "Newtonsoft.Json": "6.0.6", 
    "Microsoft.CSharp": "4.0.1-beta-23516" 
    }, 
    "frameworks": { 
    "dnx451": { 
     "dependencies": { 
     "System.Net.Http": "4.0.1-beta-23516" 
     } 
    }, 
    "dnxcore50": { 
     "dependencies": { 
     "System.Net.Http": "4.0.1-beta-23516" 
     } 
    } 
    } 
} 

Entrambe le versioni funzionano come sono stato in grado di eseguire il debug il mio HttpClient chiamate con successo .

È possibile ignorare le altre dipendenze tranne System.Net.Http.

Problemi correlati