2013-11-26 4 views
5

Я прочитал http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api и попытался использовать код с этой страницы:HttpResponseMessage не работает в Web Api (.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); 
     } 
    } 
} 

Когда я строю я не получаю сообщение об ошибке, но среда выполнения дает эту ошибку :

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'.

У меня есть ссылка на System.Net.Http в моей справочной папке моего проекта. Если я посмотрю на его свойства, это говорит о версии 4.0.0.0 и Runtime Version 4.0.30319. Мои свойства проекта говорят, что целевая структура - .NET 4.5.

My IntelliSense в VS2013 Express также не хочет подбирать что-либо, связанное с HttpResponseMessage или HttpRequestMessage.

Я попытался удалить ссылку и повторно добавить ее, но безрезультатно.

Любая помощь была бы чрезвычайно оценена.

ответ

8

В вашем web.config попробуйте добавить:

<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

Не забудьте элемент 'compilation' между' system.web' и 'assemblylies'. –

0

Попробуйте добавить узел привязки в конфигурационном файле

<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

Ну, я мог бы быть поздно, но только в том случае, если кто-то сталкивался с этой проблемой.

Прежде всего, вам нужно найти строку:

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

И сделать это не самозакрывающиеся теги так:

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

Далее добавьте сборки тег внутри с информацией сборки вы охарактеризована ранее, поэтому она выглядит так:

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

И перестройте свое решение. Взгляните на this link.

+0

Это сделало трюк для меня. Он скомпилирован без проблем, но intelliSense показала его как ошибку в механизме просмотра бритвы, пока я не перезапустил Visual Studio. –

Смежные вопросы