Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HttpResponseMessage not working in Web Api (.NET 4.5)

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.

like image 311
quijames Avatar asked Nov 26 '13 14:11

quijames


2 Answers

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.

like image 195
Tave Avatar answered Sep 29 '22 03:09

Tave


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 :)

  1. Right-click the References folder > Add Reference...
  2. Expand Assemblies on the left side of the window and select Framework.
  3. 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.
  4. Rebuild the project.
like image 30
Er Suman G Avatar answered Sep 29 '22 03:09

Er Suman G