【备忘】ASP.NET MVC 5 升级到 ASP.NET Core MVC 的部分变化
正在将一个 .net 4.5 的项目(MVC 5)升级到 .net core 2.1,中间遇到了许多的修改,记在下面,帮大家少走弯路。
- System.Drawing 下面很多类已经不存在(如Bitmap),可以下载扩展包,例如:https://github.com/zkweb-framework/ZKWeb.System.Drawing,或:https://www.nuget.org/packages/System.Drawing.Common/
- Controller 中已经没有 OnResultXX() 的重写方法,解决方法:让 Controller 实现 IResultFilter 接口即可
- RouteData.GetRequiredString("controller") 方法已经不被支持,可以使用 RouteData.Values["controller"].ToString() 方法来取代
- Cookie 的写入方法如:
Response.Cookies.Append("SMS", "1", new CookieOptions() { Expires = DateTime.Now.AddMinutes(2) });
- 例如 OnResultExecuting(ResultExecutingContext filterContext) 中的 filterContext.Controller 已经改为 object 类型,如果你确定使用的是默认的 Controller 的话,可以这样写:
(filterContext.Controller as Controller).ViewData
- Controller 中的 Session["xx"] 访问方式改为 HttpContext.Session.GetString("xx")
- MvcHtmlString 变为 HtmlString,接口为 IHtmlContent
- [ValidateInput(false)] 标签已经不再需要添加:https://github.com/aspnet/Mvc/issues/324
- Response.ClearContent(); 已经不能使用, Response.BinaryWrite() 方法改为 Response.Body.Write()
- new UrlHelper(helper.ViewContext.RequestContext) 改为 new UrlHelper(helper.ViewContext)
- Request.UserHostName 改为 Request.Host.Value
- Request.Url.Host 改为 Request.Host,注意:通常会包含端口号,或使用:httpContext.Connection.RemoteIpAddress
- Request.UserHostAddress 改为 httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
- HttpUnauthorizedResult 改名为 UnauthorizedResult
- Controller 的 OnAuthentication() 重写方法已经没有了
- HtmlHelper.AttributeEncode() 方法已失效
- Request..HttpMethod 改为 Request.Method
- Request.IsSecureConnection 可以使用 Request.IsHttps
- Request.Url.PathAndQuery 改为 Request.Path + Request.Query,可以自己写一个扩展方法进行封装
- Request.UrlReferrer 已经不被支持,可以自己封装:request.Headers["Referer"].ToString()
- Request.UserAgent 已经不被支持,可以自己封装:request.Headers["User-Agent"].ToString()
- 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提示添加即可。
转载请注明出处和作者,谢谢!
作者:JeffreySu / QQ:498977166
博客:http://szw.cnblogs.com/
Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异