首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法配置“IApplicationBuilder UseOwin”

无法配置“IApplicationBuilder UseOwin”
EN

Stack Overflow用户
提问于 2017-08-23 19:07:32
回答 2查看 3K关注 0票数 3

正如官方文档中所述,我试图在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.0Visual Studio 2017

误差

我收到了跟随错误。

返回owinAppBuilder.Build,Task>>();TypeLoadException:无法从程序集'System.Security,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f7f11d50a3a‘加载类型System.Security。

我的尝试

代码语言:javascript
复制
    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>>();
    }));
EN

回答 2

Stack Overflow用户

发布于 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文件并更改

代码语言:javascript
复制
<TargetFramework>netcoreapp2.0</TargetFramework>

例如,对于一些支持.NET标准2.0的.NET框架版本:

代码语言:javascript
复制
<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运行等等)。

票数 2
EN

Stack Overflow用户

发布于 2017-08-24 04:45:28

Microsoft.Owin组件不会在DotNetCore2.0上工作,它们只在.NET 4.5+上工作

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45847623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档