使用 '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, 恢复包 'Mic

Posted

技术标签:

【中文标题】使用 \'.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, 恢复包 \'Microsoft.AspNet.Mvc 5.2.7\',【英文标题】:Package 'Microsoft.AspNet.Mvc 5.2.7' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7,使用 '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, 恢复包 'Microsoft.AspNet.Mvc 5.2.7', 【发布时间】:2022-01-15 11:49:57 【问题描述】:

我想从我的 ASP.NET Framework MVC 项目(.NET Framework 4.7) 迁移到 ASP.NET Core MVC 项目(.NET 5.0)。在解决方案中有一些类库。 在其中一个类库中有以下类:

namespace Framework

    public class AtisunAuthorize : AuthorizeAttribute
    
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        
            var integratedAuthentication = this.GetAppSetting<bool>("IntegratedAuthentication");
            if (!integratedAuthentication)
            
                base.HandleUnauthorizedRequest(filterContext);
                return;
            
            var loginUrl = this.GetAppSetting<string>("UMSLogInUrl");
            if(string.IsNullOrWhiteSpace(loginUrl))
            
                throw new AtiSunException("");
            
            var returnUrl = HttpUtility.UrlEncode(filterContext.HttpContext.Request.Url.AbsoluteUri);
            filterContext.Result = new RedirectResult(loginUrl + "?ReturnUrl=" + returnUrl);
        
    

我从 nuget 安装“System.Web.Mvc”,然后我发现以下警告和错误:

1- 警告:

使用 '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version= 恢复包“Microsoft.AspNet.Mvc 5.2.7” v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' 而不是项目目标框架'net5.0'。此软件包可能与您的项目不完全兼容。

2- 以下行错误:

var returnUrl = HttpUtility.UrlEncode(filterContext.HttpContext.Request.Url.AbsoluteUri);

我该如何解决这个问题?如有任何帮助,我们将不胜感激。

【问题讨论】:

【参考方案1】:

第二个问题出现错误,因为 AuthorizationContext HttpContext. Request. Url. AbsoluteUri 未读取。


路线原因及建议:

你需要重写HandleUnauthorizedRequest方法,因为.net Core和.NET Framework项目结构不同,你的.net Core项目实现是通过中间件编码的。

1.在.net框架中,通常我们可以在Global.asax中添加一些方法来实现我们想要的一些功能。

2.但是在.net core中,我们需要使用中间件来实现。

1. Customize the behavior of AuthorizationMiddleware

2. ASP.NET Core middleware and authorization

3. Adding your own Custom Authorize Attribute to Asp. Net Core 2.2 and above

【讨论】:

以上是关于使用 '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, 恢复包 'Mic的主要内容,如果未能解决你的问题,请参考以下文章

使用“.NETFramework,Version=v4.6.1”而不是项目目标框架恢复包“GuerrillaSharp 1.0.0”

未找到框架“.NETFramework,Version=v4.7.1”的参考程序集

1.关于使用vscode+unity时出现.NETFramework,Version=v4.7.1 were not found 的解决方法

使用“.NetFramework Version= v4.6.1”恢复了包“MimeSharp 1.0.0”

强制 NuGet 包平台

为啥Visual Studio会在temp文件夹下生成如下文件.NETFramework,Version=v4.5.AssemblyAttributes.cs