【備忘】ASP.NET MVC 5 升級到 ASP.NET Core MVC 的部分變化

SZW發表於2018-05-01

    正在將一個 .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提示新增即可。

相關文章