• 【备忘】ASP.NET MVC 5 升级到 ASP.NET Core MVC 的部分变化


        正在将一个 .net 4.5 的项目(MVC 5)升级到 .net core 2.1,中间遇到了许多的修改,记在下面,帮大家少走弯路。

    1. System.Drawing 下面很多类已经不存在(如Bitmap),可以下载扩展包,例如:https://github.com/zkweb-framework/ZKWeb.System.Drawing,或:https://www.nuget.org/packages/System.Drawing.Common/
    2. Controller 中已经没有 OnResultXX() 的重写方法,解决方法:让 Controller 实现 IResultFilter 接口即可
    3. RouteData.GetRequiredString("controller") 方法已经不被支持,可以使用 RouteData.Values["controller"].ToString() 方法来取代
    4. Cookie 的写入方法如:
       Response.Cookies.Append("SMS", "1", new CookieOptions()
       {
           Expires = DateTime.Now.AddMinutes(2)
       });
    5. 例如 OnResultExecuting(ResultExecutingContext filterContext) 中的 filterContext.Controller 已经改为 object 类型,如果你确定使用的是默认的 Controller 的话,可以这样写:
      (filterContext.Controller as Controller).ViewData
    6. Controller 中的 Session["xx"] 访问方式改为 HttpContext.Session.GetString("xx")
    7. MvcHtmlString 变为 HtmlString,接口为 IHtmlContent
    8. [ValidateInput(false)] 标签已经不再需要添加:https://github.com/aspnet/Mvc/issues/324
    9. Response.ClearContent(); 已经不能使用, Response.BinaryWrite() 方法改为 Response.Body.Write()
    10. new UrlHelper(helper.ViewContext.RequestContext) 改为 new UrlHelper(helper.ViewContext)
    11. Request.UserHostName 改为 Request.Host.Value
    12. Request.Url.Host 改为 Request.Host,注意:通常会包含端口号,或使用:httpContext.Connection.RemoteIpAddress
    13. Request.UserHostAddress 改为 httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
    14. HttpUnauthorizedResult 改名为 UnauthorizedResult
    15. Controller 的 OnAuthentication() 重写方法已经没有了
    16. HtmlHelper.AttributeEncode() 方法已失效
    17. Request..HttpMethod 改为 Request.Method
    18. Request.IsSecureConnection 可以使用 Request.IsHttps
    19. Request.Url.PathAndQuery 改为 Request.Path + Request.Query,可以自己写一个扩展方法进行封装
    20. Request.UrlReferrer 已经不被支持,可以自己封装:request.Headers["Referer"].ToString()
    21. Request.UserAgent 已经不被支持,可以自己封装:request.Headers["User-Agent"].ToString()
    22. Request.IsAjaxRequest 方法在.net core 中没有支持,可以自行扩展:
            /// <summary>
            /// Determines whether the specified HTTP request is an AJAX request.
            /// </summary>
            /// 
            /// <returns>
            /// true if the specified HTTP request is an AJAX request; otherwise, false.
            /// </returns>
            /// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
            public static bool IsAjaxRequest(this HttpRequest request)
            {
                if (request == null)
                    throw new ArgumentNullException("request");
    
                if (request.Headers != null)
                    return request.Headers["X-Requested-With"] == "XMLHttpRequest";
                return false;
            }
        }

         注意:命名空间多数都会有变化,根据IDE提示添加即可。

  • 相关阅读:
    JSTL 标签库
    C++(一)— stringstream的用法
    深度学习—反向传播的理解
    深度学习—线性分类器理解
    Python—numpy.bincount()
    Python—numpy.argsort()
    Python—numpy.flatnonzero()
    C++(零)— 提高程序运行效率
    机器学习(八)—GBDT 与 XGBOOST
    机器学习(七)—Adaboost 和 梯度提升树GBDT
  • 原文地址:https://www.cnblogs.com/szw/p/8976505.html
Copyright © 2020-2023  润新知