升级到Web API 2会破坏应用程序

时间:2014-01-27 20:18:39

标签: c# .net asp.net-web-api2 umbraco7

我有一个Umbraco 7应用程序,它使用V4.0程序集来处理System.Web.WebHost,System.Web.Http和相关程序集。我正在尝试使用Umbraco应用程序使用Web API2 dll,并且我很难过。

如果我使用程序集重定向默认为V5.0程序集,则当Umbraco加载并尝试使用控制器时,应用程序会中断。这里的问题是在System.Web.Http的V5.0中,ApiController现在在设置Request时进行检查。此检查始终失败并抛出InvalidOperationException:

set
{
    if (value == null)
    {
        throw Error.PropertyNull();
    }
    HttpRequestContext requestContext = value.GetRequestContext();
    HttpRequestContext httpRequestContext = this.RequestContext;
    if (requestContext != null && requestContext != httpRequestContext)
    {
        throw new InvalidOperationException(SRResources.RequestContextConflict);
    }
    this.ControllerContext.Request = value;
    value.SetRequestContext(httpRequestContext);
    RequestBackedHttpRequestContext requestBackedHttpRequestContext = httpRequestContext as RequestBackedHttpRequestContext;
    if (requestBackedHttpRequestContext != null)
    {
        requestBackedHttpRequestContext.Request = value;
    }
}

我正在尝试的另一件事是加载和使用两个DLL。在这种情况下,我遇到了一个错误,但不知道我是否正确地做了。我所做的就是添加文件夹以保存相同dll的单独版本,并使用以下内容将它们连接到web.config中:

<probing privatePath="webapi2_dlls;" />

错误:     CS1705:程序集'WebApi,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'使用'System.Web.Http,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',其版本高于引用程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'

有希望吗?

1 个答案:

答案 0 :(得分:0)

看起来Umbraco是使用Web API的旧版本(4.0)构建的。将以下绑定重定向添加到配置后,您可以再试一次:

<system.webServer>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
        <dependentAssembly>
          <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" />
          <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>