1

我有一个 Umbraco 7 应用程序,它使用 V4.0 程序集来处理诸如 System.Web.WebHost、System.Web.Http 和相关程序集之类的东西。我正在尝试让 Web API2 dll 与 Umbraco 应用程序一起使用,并且遇到了困难。

如果我使用程序集重定向默认为 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,版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”

有希望吗?

4

1 回答 1

0

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

<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>
于 2014-01-27T22:49:54.523 回答