【备忘】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", "", new CookieOptions()
{
Expires = DateTime.Now.AddMinutes()
}); - 例如 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提示添加即可。
【备忘】ASP.NET MVC 5 升级到 ASP.NET Core MVC 的部分变化的更多相关文章
- 第二十一节:Asp.Net Core MVC和WebApi路由规则的总结和对比
一. Core Mvc 1.传统路由 Core MVC中,默认会在 Startup类→Configure方法→UseMvc方法中,会有默认路由:routes.MapRoute("defaul ...
- [备忘]Asp.net MVC 将服务端Model传递的对象转为客户端javascript对象
<script type="text/javascript"> var jsObject = @Html.Raw(Json.Encode(Model.Objects)) ...
- 如何将一个 ASP.NET MVC 4 和 Web API 项目升级到 ASP.NET MVC 5 和 Web API 2
----转自微软官网www.asp.net/mvc/ ASP.NET MVC 5 和 Web API 2 带来的新功能,包括属性路由. 身份验证筛选器,以及更多的主机.请参阅http://www.as ...
- 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级
标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...
- ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
写在前面 ASP.NET Core是微软新推出的支持跨平台.高性能.开源的开发框架,它的优势不必多说,因为已经说得太多了.当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大 ...
- 从零开始实现ASP.NET Core MVC的插件式开发(九) - 升级.NET 5及启用预编译视图
标题:从零开始实现ASP.NET Core MVC的插件式开发(九) - 如何启用预编译视图 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/1399 ...
- asp.net mvc 4 项目升级到 asp.net mvc5
一.开始 1.打开或新建asp.net mvc 4项目 2.修改 global.asax文件 原: WebApiConfig.Register(GlobalConfiguration.Configur ...
- 从ASP.NET 升级到ASP.NET5(RC1) - 翻译
前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...
- 基于Prism.Windows的UWP开发备忘
以前做UWP开发都是使用MvvmLight,主要是简单易上手,同时也写了很多MvvmLight的开发系列文章: UWP开发必备以及常用知识点总结 UWP开发之Mvvmlight实践九:基于MVVM的项 ...
随机推荐
- Ireport启动错误
问题描述:cannot find java.exe Neither (null)\jre\bin\java.exe nor (null)\bin\java.exe exits 解决办法: 打开Irep ...
- 010 Editor 8.0.1 之 暴力破解
一.工具及软件介绍二.破解1.打开调试程序2.打开注册页面3.在弹出窗口API中下断4.点击注册按钮5.逐一进去观察6.找到正确的授权字符串7.找到函数头8.找到计算出EBX的CALL9.进入函数跟踪 ...
- JavaSE基础知识(7)—常用类
一.包装类 1.理解 java为八大基本数据类型一一对应提供了引用类型,方便使用里面的属性和方法 2.包装类型 byte——>Byteshort——>Shortint——>Integ ...
- maven项目引用时,导入类报错,选择两个项目同时执行Maven update
maven项目引用时,导入类报错,选择两个项目同时执行Maven update springboot引入第三方jar,需要扫描时加@ComponentScan("第三方的包名") ...
- Element transfer 两边数据(左右)的显示问题?
本仙今天遇到这个穿梭框的问题 这个是我前几天刚换的(原来用的是iview的,换成了element ) 别问我为什么,用过iview的都知道 转入正题 问题:从后台获取的数据全部都显示在了我的左边框中 ...
- PowerDesigner反向生成PDM和name与注释互换
Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl 'the current model 'get the ...
- 31. pt-variable-advisor
pt-variable-advisor h=192.168.100.101,P=3306,u=admin,p=admin mysqladmin var>/root/test/pt-variabl ...
- java - Integer、int 、String相互转换总结
一下子还真记不清这三种数据类型之间的转换方法,所以做个小笔记. public class Test03 { public static void main(String[] args) { //int ...
- RT-thread-------------------信号量
信号量:用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的.(互斥量只能由持有线程释放,而信号量则可以由任何线程释放) 在rtt中,信号量分为计数型信号量和二值信号量(作 ...
- html中script标签的使用方法
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素.这个元素由Netscape创造并在Netscape Navigator2中首先实现.后来,这个元素被加入到 ...