正如官方文档中所述,我试图在UseOwin中实现UseOwin,我试图在IApplicationBuilder (Microsoft.AspNetCore.Builder.IApplicationBuilder)中使用/端口IAppBuilder (Microsoft.Owin.Builder.AppBuilder)。使用IAppBuilder编写的遗留代码在.Net Framework4.5上运行良好。
我看过几个关于在IAppBuilder中使用IAplicationBuilder的例子,例如例1 例2。这些尝试都是关于.netcore 1.1的,而不是.net核心2.0。也许这就是我无法移植的原因。
请分享您的想法,无论我正在尝试在.net内核2.0中实现一些目前不可能的事情,还是我的代码中有一些错误。
注意:我使用的是dotnetcore 2.0和Visual Studio 2017
误差
我收到了跟随错误。
返回owinAppBuilder.Build,Task>>();TypeLoadException:无法从程序集'System.Security,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f7f11d50a3a‘加载类型System.Security。
我的尝试
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>>();
}));发布于 2017-12-06 08:24:59
Microsoft.Owin和相关的软件包没有.NET核心的目标,.NET标准没有目标。它们所拥有的只是针对完全.NET的dll。您可以引用针对.NET核心的项目中的此类库,但它们不能保证工作,就像您自己看到的那样,因为full .NET和.NET Core的API (类\方法\签名集合)是不同的。Visual甚至会在执行此操作时显示警告,例如:
包'Microsoft.Owin 3.1.0‘是使用'.NETFramework,Version=v4.6.1’而不是项目目标框架'.NETCoreApp,Version=v2.0‘恢复的。此软件包可能与您的项目不完全兼容。
有Microsoft.AspNetCore.Owin包,您可以使用.NET核心应用程序中的OWIN中间件作为您的第一个链接描述,但是它提供的几乎全部是UseOwin扩展方法。那里没有AppBuilder类型等等,也没有Microsoft.AspNetCore.Owin.Cors包或类似的包。因此,您要么自己实现所有这些(没有理由,因为您可以使用asp.net核心框架提供的相同功能),要么等待针对.NET标准\ core的OWIN包并这样做(没有检查,也许它们已经存在了)。
因此,您的代码使用确实与目标框架不兼容的包作为运行时显示的异常。因此,另一个答案(由于某种原因被否决)在技术上是正确的。
如果您仍然希望可靠地使用这些包,则需要针对完整的.NET框架,而不是.NET核心。为此,打开.csproj文件并更改
<TargetFramework>netcoreapp2.0</TargetFramework>例如,对于一些支持.NET标准2.0的.NET框架版本:
<TargetFramework>net47</TargetFramework>然后转到nuget,如果您有microsoft.aspnetcore.all包(或其他针对.NET核心的包)-卸载它,您就不需要它了。然后安装Microsoft.AspNetCore包和您需要的所有其他asp.net核心包(如果还没有安装)。重建,运行,它会工作得很好。
那是因为(大部分?)AspNetCore包的目标是.NET标准,而不是.NET核心,您可以在针对完整.NET框架的项目中使用它们。
请注意,这样做有asp.net核心项目,但没有在.NET Core上运行,由此产生的所有后果(不能与dotnet run一起运行,在dotnet run上需要使用dotnet run运行等等)。
发布于 2017-08-24 04:45:28
Microsoft.Owin组件不会在DotNetCore2.0上工作,它们只在.NET 4.5+上工作
https://stackoverflow.com/questions/45847623
复制相似问题