Reputation: 537
I read http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api and tried to use the code from that page:
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);
}
}
}
When I build I don't get an error, but runtime gives this error:
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'.
I have got a reference to System.Net.Http in my references folder of my project. If I look at it's properties, it says Version 4.0.0.0 and Runtime Version 4.0.30319. My project properties says target framework is .NET 4.5.
My IntelliSense in VS2013 Express also doesn't want to pick up anything to do with HttpResponseMessage or HttpRequestMessage.
I've tried removing the reference and re-adding it, but to no avail.
Any help would be tremendously appreciated.
Upvotes: 13
Views: 19971
Reputation: 6290
I did all of the above mentioned solutions for my problem of at:
actionContext.Response = new HttpResponseMessage(statusCode: HttpStatusCode.UpgradeRequired);
Where .Response and the HttpResponseMessage & HttpStatusCode would error out with
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'.
I removed and re-added the reference to System.Net.Http, added the entry in the web.config file and also installed it from Nuget package manager using the command:
PM> Install-Package System.Net.Http
and yet it did not work. Ultimately I closed and opened the solutions with all of the above fixes in, and it started working.
Upvotes: 1
Reputation: 1
But unfortunately, I had no luck with this. At last, I found a solution which worked for me and saved my day :)
Right-click the References folder > Add Reference... Expand Assemblies on the left side of the window and select Framework. Scroll to and select System.Net.Http in the list of assemblies. Make sure the box next to System.Net.Http is checked, then click OK. Rebuild the project.
This one is working fine. Go Head
Upvotes: 0
Reputation: 681
I had tried this highly suggested solution (I found this as accepted answer in many similar questions here in SO)
In your
Web.Config
write this and rebuild the solution<system.web> <compilation debug="true" targetFramework="4.0" /> <compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </assemblies> </compilation> </system.web>
But unfortunately, I had no luck with this. At last, I found a solution which worked for me and saved my day :)
References
folder > Add Reference...
System.Net.Http
in the list of assemblies.
Make sure the box next to System.Net.Http
is checked, then click
OK
. Upvotes: 1
Reputation: 359
Had the same problem, I just reinstalled 'System.Net.Http' Nuget Package and it worked.
Upvotes: 0
Reputation: 151
Well, I might be late, but just in case someone else faced this problem.
First of all, you need to find a string:
<compilation debug="true" targetFramework="4.5"/>
And make it not self-closing tag like that:
<compilation debug="true" targetFramework="4.5">
</compilation>
Next, add assemblies tag inside with assembly information you mansioned before, so it looks like this:
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
And rebuild your solution. Take a look at this link.
Upvotes: 15
Reputation: 16585
In your web.config try adding:
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
</system.web>
</configuration>
Upvotes: 11
Reputation: 9804
Try adding assembly binding in config file
<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
Upvotes: 0