gpt4 book ai didi

c# - 无法配置 'IApplicationBuilder UseOwin'

转载 作者:行者123 更新时间:2023-11-30 17:32:48 28 4
gpt4 key购买 nike

如官方所述document ,我正在尝试在 Startup.cs 中实现 UseOwin我正在尝试使用/移植 IAppBuilder (Microsoft.Owin.Builder.AppBuilder)IApplicationBuilder (Microsoft.AspNetCore.Builder.IApplicationBuilder) 中。我使用 IAppBuilder 编写的遗留代码在 .Net Framework 4.5 上运行良好。

我看过几个关于在 IAplicationBuilder 中使用 IAppBuilder 的例子,例如example 1 example 2 .这些尝试是关于 .netcore 1.1 而不是 .net core 2.0。可能这就是我无法移植的原因。

请分享您的想法,无论我是想在 .net core 2.0 中实现目前无法实现的目标,还是我的代码中存在一些错误。

注意:我正在使用 dotnetcore 2.0Visual Studio 2017

错误

我遇到以下错误。

return owinAppBuilder.Build, Task>>(); TypeLoadException: Could not load type 'System.Security.Cryptography.DpapiDataProtector' from assembly 'System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

我的尝试

    app.UseOwin(setup => setup(next =>
{
var owinAppBuilder = new AppBuilder();

var aspNetCoreLifetime =
(IApplicationLifetime)app.ApplicationServices.GetService(typeof(IApplicationLifetime));

new AppProperties(owinAppBuilder.Properties)
{
OnAppDisposing = aspNetCoreLifetime?.ApplicationStopping ?? CancellationToken.None,
DefaultApp = next,
AppName = "test"
};

// Only required if CORS is used, configure it as you wish
var corsPolicy = new System.Web.Cors.CorsPolicy
{

AllowAnyHeader = true,
AllowAnyMethod = true,
AllowAnyOrigin = true,
SupportsCredentials = true
};

//corsPolicy.GetType()
// .GetProperty(nameof(corsPolicy.ExposedHeaders))
// .SetValue(corsPolicy, tusdotnet.Helpers.CorsHelper.GetExposedHeaders());

owinAppBuilder.UseCors(new Microsoft.Owin.Cors.CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(corsPolicy)
}
});

PublicClientId = "self";

OAuthAuthorizationServerOptions OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new Microsoft.Owin.PathString("/Login"),
Provider = new MyServiceProvider(PublicClientId),

AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60),
AllowInsecureHttp = true,
RefreshTokenProvider = new MyRefreshTokenProvider(),
};

owinAppBuilder.UseOAuthBearerTokens(OAuthOptions);
//owinAppBuilder.UseTus(context => new DefaultTusConfiguration
//{
// // Excluded for brevity, use the same configuration as you would normally do
//});


return owinAppBuilder.Build<Func<IDictionary<string, object>, Task>>();
}));

最佳答案

Microsoft.Owin 和相关包没有针对 .NET Core 的目标,也没有针对 .NET Standard 的目标。他们所拥有的只是针对完整 .NET 的 dll。您可以从面向 .NET Core 的项目中引用此类库,但如您所见,它们不能保证正常工作,因为完整的 .NET 和 .NET Core 的 API(类集\方法\签名)是不同的。 Visual Studio 甚至会在您这样做时显示警告,例如:

Package 'Microsoft.Owin 3.1.0' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.

Microsoft.AspNetCore.Owin 包,您可以在 .NET Core 应用程序中使用 OWIN 中间件,如您的第一个链接所述,但几乎所有它提供的都是 UseOwin 扩展方法。那里没有 AppBuilder 类型等等,也没有 Microsoft.AspNetCore.Owin.Cors 包或类似的包。因此,您必须自己实现所有这些(没有理由,因为您可以使用 asp.net 核心框架提供的相同功能)或等待以 .NET Standard\Core 为目标的 OWIN 包并执行此操作(未检查,也许它们已经存在了)。

因此,您的代码使用的包确实与您的目标框架不兼容,正如您在运行时遇到的异常所示。所以另一个答案(出于某种原因被否决)在技术上是正确的。

如果您仍想可靠地使用这些包 - 您需要针对完整的 .NET Framework 而不是 .NET Core。为此,请打开您的 .csproj 文件并更改

<TargetFramework>netcoreapp2.0</TargetFramework>

以一些支持.NET Standard 2.0 的.NET framework 版本为例:

<TargetFramework>net47</TargetFramework>

然后转到 nuget 程序包管理器,如果您有 microsoft.aspnetcore.all 程序包(或其他针对 .NET Core 的程序包)- 卸载它,无论如何您都不需要它。然后安装 Microsoft.AspNetCore 包和您需要的所有其他 asp.net 核心包(如果尚未安装)。重建、运行,它将正常工作。

之所以可行,是因为所有(大多数?)AspNetCore 包都以 .NET Standard 而非 .NET Core 为目标,您可以在以完整 .NET Framework 为目标的项目中使用它们。

请注意,通过这样做,您拥有 asp.net Core 项目,但不在 .NET Core 上,由此产生的所有后果(无法使用 dotnet run 运行,在 linux 上需要使用单声道等)。

关于c# - 无法配置 'IApplicationBuilder UseOwin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847623/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com