我有一个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'
有希望吗?
答案 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>