2013-11-26 23 views
5

ho letto http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api e ha cercato di utilizzare il codice da quella pagina:HttpResponseMessage non funziona in Api Web (.NET 4.5)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web; 
using System.Web.Http; 
using System.Web.Http.Filters; 
using System.Web.Http.Controllers; 

public class RequireHttpsAttribute : AuthorizationFilterAttribute 
{ 
    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps) 
     { 
      actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) 
      { 
       ReasonPhrase = "HTTPS Required" 
      }; 
     } 
     else 
     { 
      base.OnAuthorization(actionContext); 
     } 
    } 
} 

Quando costruisco non ottengo un errore, ma di runtime dà questo errore :

CS0012: The type 'System.Net.Http.HttpRequestMessage' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Ho un riferimento a System.Net.Http nella mia cartella di riferimenti del mio progetto. Se guardo le sue proprietà, dice versione 4.0.0.0 e Runtime versione 4.0.30319. Le mie proprietà del progetto dicono che il framework di destinazione è .NET 4.5.

Anche My IntelliSense in VS2013 Express non desidera rilevare nulla da fare con HttpResponseMessage o HttpRequestMessage.

Ho provato a rimuovere il riferimento e ad aggiungerlo di nuovo, ma senza risultato.

Qualsiasi aiuto sarebbe enormemente apprezzato.

risposta

8

Nel web.config prova ad aggiungere: vincolante

<configuration> 
    <system.web> 
     <compilation> 
      <assemblies> 
       <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
      </assemblies> 
      </compilation> 
    </system.web> 
</configuration> 
+1

Non dimenticare l'elemento 'compilation' tra' system.web' e 'assembly '. –

0

Prova assemblaggio aggiungendo nel file di configurazione

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime 
4

Beh, potrei essere in ritardo, ma solo nel caso in cui qualcun altro affrontato questo problema.

Prima di tutto, è necessario trovare una stringa:

<compilation debug="true" targetFramework="4.5"/> 

e renderlo non tag di chiusura automatica del genere:

<compilation debug="true" targetFramework="4.5"> 
</compilation> 

Avanti, aggiungere tag assemblee all'interno con le informazioni di montaggio voi prima, così appare:

<compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
     </assemblies> 
</compilation> 

E ricostruire la soluzione. Dai uno sguardo allo this link.

+0

Questo ha fatto il trucco per me. È stato compilato senza problemi, ma intelliSense lo ha mostrato come un errore nel motore di visualizzazione del rasoio finché non ho riavviato Visual Studio. –

Problemi correlati