微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……
RazorPages Application(按微软官方文档称呼)是微软最新推出的、基于.NET core框架的最前沿的ASP.NET开发技术。先学RazorPages如果从知识进化结构上讲,先学习MVC会更自然一点(MVC在前,RazorPages在后),但是,为了和前端学习相衔接,我们还是优先为什么要学?学习最新的技术确实有一定的风险。但是RazorPages Application的风险并不大:它和MVC很多地方一致或类似它基于.NET core是微软主推的ASP.NET框架而且,了解RazorPa ……
当JsonResult首先HttpMethod的返回值不能是void,可以是:public JsonResult OnGet() //推荐,可读性更高或者:public IActionResult OnGet()然后返回一个JsonResult实例即可:return new JsonResult(new{sname = "阿泰",age = 23,isMale = true,});JsonSerializerOptions最新的ASP.NET core版本默认(仅测试也仅能)使用System.Tex ……
原理和MVC缓存:Cache 类似,除了:MVCRazorPage 过期时间设置Slide和Abosulte不可共存Slide和Abosulte可以共存清理机制ASP.NET自动调节清理开发人员设置API调用HttpContext.Cache依赖注入IMemoryCache对象特性配置整页缓存[OutputCache][ResponseCache]部分页缓存ChildAction上添加[OutputCache]TagHelper<cache></cache>IMemoryCach ……
当前用户(CurrentUser) 会被大量使用,所以首先想到的就是在PageModel的基类_LayoutModel中引入public int? CurrentUserId{get{string fromSession = HttpContext.Session.GetString("UserName");if (string.IsNullOrEmpty(fromSession)){return null;}return JsonConvert.DeserializeObject<UserMode ……
适用于Action或者整个Controller特性按接口可分为四种Filter:IAuthorization:Authorization: 用于验证IActionFilter:ContextPerRequestIResultFilter: IExceptionFilter:HandleError 按顺序依次执行同种Attribute,使用Order区分内置ActionFilterAttributeActionExecutingContext演示:取HttpCcontext/Controller/Actio ……
虽然我们将LogOnStatus封装成了一个PartialView,但为了能够正常显示,我们需要在父页面准备好它的Model,这是有些麻烦的。能不能让PartialView自己生成所需的Model呢?这就需要使用:View Component。(复习:PatialView没有“后台”)使用ViewComponet,也需要“三步曲”:ViewComponent类自己声明一个类,让这个类继承ViewComponent,然后在类中添加一个Invoke()方法public class LogonStatus : ……
部分页是_Layout和section以外又一个重要的Razor page重用组件partial view的查找:Partial view discovery它是默认异步(async)的可以传递Model参考:Partial Tag HelperHtml片段:重用不能直接被Http请求没有“后台逻辑” :OnGet()/OnPost()PageModel不再有用 name(路径)默认查找当我们在name里单写一个文件名:/Pages/Pages/Shared当前.cshtml文件所在文件夹指定除此以外,我 ……
OnGet()和OnPost()都被称之为Handler方法,此前他们都是返回void,但实际上,他们可以有任何类型的返回值。通常,void以外,我们返回IActionResult。PageResultreturn void;实际上等于 return Page()public void OnGet(){}//实际上完全等价于:public PageResult OnGet(){return Page();}Page()方法返回的就是PageResult对象;PageResult继承自ActionResu ……
服务器端的Session cookie的局限:不宜存放大量数据,以免加重流量负担不宜存放敏感数据,以免泄露(应用:验证码)于是基于cookie,ASP.NET推出了session(其他 web server技术也一样):session把主要数据存放在服务器端,只把SessionID存放在cookie中来回传递服务器通过SessionId定位session中存放的数据。session一般存放在内存中,所以有时候session也被用作“缓存”,以减少数据库的请求。(通常来说,数据库是系统最大瓶颈)sessio ……