使用.net core基于Razor Pages开发网站一些工作笔记
本文是在实践工作中遇到的一些问题记录,并给出是如何解决的,.net core已经升级到3.0版本了,其实在项目中很早就已经在使用.net core来开发后台接口了,正好有个网站项目,就使用了Razor Pages来开发,从体验上来说,如果你熟悉Razor Pages的话,开发速度是非常快的,如果有趁手的框架,那就更是如虎添翼。
好了,闲话少说,接下来将遇到了这些杂乱的问题记录如下:
网站目录里面的_ViewImports.cshtml用途
_ViewImports.cshtml用于引入命名空间,引入后就可以在Razor Page页面上使用。每个目录(文件夹)都可以建一个 _ViewImports.cshtml 视图,这样当前目录下的所有Razor Page页面都可以除了可以使用根目录的 _ViewImports.cshtml 引入的命名空间外,还可以使用当前目录 _ViewImports.cshtml 引入的命名空间所有对象。有点继承的意思。
部分视图如何引入?
部分视图是很有用的一个功能特性,您可以把它当成webform时代的用户控件,在引入时,只需要通过如下代码即可以了:
<partial name="~/Views/Folder/_PartialName.cshtml" />
登录功能如果有记住密码,如何实现?
使用Razor Page开发网站时,如果在您的登录界面上有个记住用户功能,用户下次进来直接进入后台,不需要再次登录。实现这个功能,简单一点的方法就是使用cookie认证,在首次登录成功后,给用户颁发一个长期的cookie,代码如下:
await HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
IsPersistent = true
});
基于上面的记住用户的功能,实现方式很多,以上代码用于生产环境需要评估安全风险,但对于内部系统,可以这样取巧实现;另外对于基于cookie的方式,还存在一个问题就是用户如果设置了退出浏览器自动清空一切历史记录的话,此方法失效。
后台接口时间格式序列化问题
在编写web api接口时,会遇到时间格式化的问题,如有的地方需要使用短时间格式(年-月-日,如2019-01-02),有的地方需要使用长时间格式(年-月-日 小时:分钟:秒),即时间显示需要具体到分钟秒这种格式,如果您的框架统一处理了时间格式为短时间格式,那么遇到长时间格式问题,就需要单独处理,序列化用得较多的组件就是 NewtonSoft.json,那么我们只需要自定义一个格式化时间的类,写个自定义格式化时间的类,继承自IsoDateTimeConverter,然后在对应的属性上加上这个特性即可,如下代码所示:
public class CustomizedDateTimeConverer : IsoDateTimeConverter
{
/// <summary>
/// 构造函数
/// </summary>
public CustomizedDateTimeConverer() : base()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
} /// <summary>
/// 带参构造函数
/// </summary>
/// <param name="format"></param>
public CustomizedDateTimeConverer(string format) : this()
{
DateTimeFormat = format;
}
}
接下来在Startup.cs里面配置一下,如下代码所示:
services.AddJsonOptions(options =>
{
CustomizedDateTimeConverer converer = new CustomizedDateTimeConverer();
options.SerializerSettings.Converters.Add(converer);
});
然后需要使用到的dto对象或者实体对象,打上这个特性即可,如下所示:
[JsonConverter(typeof(CustomizedDateTimeConverer), “yyyy-MM-dd HH:mm:ss”)]
这样就实现了对时间格式的灵活控制,在整个后台框架设置的输出时间格式为短时间格式时,有需要的情况下,我们仍然可以根据业务需要设置长时间格式,或者其它格式化方式。
使用AutoMapper如何忽略部分属性映射?
使用automapper进行对象映射时,可以减少您写大量的赋值语句,当然你在项目中偷懒直接使用和数据库表对应的那个实体,automapper就派不上用场了。使用automapper进行对象映射时,如果源对象和目标对象有些属性不同,或者要忽略掉,如何总呢?答案其实很简单,在对应的属性上打上这个[Ignore]特性即可:
/// <summary>
/// 列表集合
/// </summary>
[Ignore]
public int[] List { get; set; }
服务器可视化监控工具
项目上线后,需要对服务器进行监控,您不可能安排一个人天天守着服务器看,需要借助 Grafana 来搞定这个需求。
Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知运维人员。
具体的使用教程网上很多,不做介绍。
原文链接:https://jhrs.com/2019/28454.html
使用.net core基于Razor Pages开发网站一些工作笔记的更多相关文章
- [译]ASP.NET Core揭秘 - Razor Pages
原文 什么是Razor Pages? Razor pages是ASP.NET Core 2.0的新特性,它被设计用来更快的开发页面,比传统的MVC模式更便捷. 创建项目 为了使用Razor Pages ...
- asp.net core 的 razor pages 如何使用ajax调用后台方法
Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容. 在网页加载时,服务器在向浏览器返回页面 ...
- 【翻译】介绍 ASP.NET Core 中的 Razor Pages
介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core 译文地址:介绍 asp. ...
- ASP.NET Core Razor Pages 初探
最近新建 Asp.net Core MVC 项目的时候不小心选错了个模板,发现了一种新的项目模板.它使用cshtml视图模板,但是没有Controller文件夹.后来才发现这是ASP.NET Core ...
- 学习 razor pages 指南
这是一个系列,我打算把此人的系列翻译一下,学习技术的同时,顺便提高一下英文水平. 原文地址:https://www.learnrazorpages.com/ 前言 欢迎来学习 razor pages ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用
前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...
- ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)
引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...
- ASP.NET Core Razor Pages
Razor 页面是Asp.Net Core2.0新增的一个功能.Razor 页面是 ASP.NET Core MVC 的一个新特性,它可以使基于页面的编码方式更简单高效. 环境:vs2017 .net ...
随机推荐
- CEGUI 0.7.7 VS2010+SP3 编译过程
1 在官方网站http://www.cegui.org.uk/ 下载最新的CEGUI 源代码 版本是0.7.7 2 下载编译需要用到的依赖文件包 将解压后的文件夹 Dependencies 和CEGU ...
- PHP网站开发方案
一. 开发成员 a)项目主管 b)页面美工c)页面开发 d)服务端程序开发e)系统与数据管理f)测试与版本控制 二. 网站组开发简明流程 三. 开发工具与环境 a) 服务器配置i. WEB服务器: F ...
- Python自学day-8
一.SocketServer 简化了编写网络服务器的难度. SocketServer一共有如下几个类型: socketserver.TCPServer :提供一个TCP的socketserver. s ...
- ZooKeeper学习之路(三)—— Zookeeper常用Shell命令
一.节点增删改查 1.1 启动服务和连接服务 # 启动服务 bin/zkServer.sh start #连接服务 不指定服务地址则默认连接到localhost:2181 zkCli.sh -serv ...
- MySQL的登录与退出以及MySQL的目录结构
一.MySQL的登录 1.利用语句mysql -uroot -proot 同时如果密码不想让别人看到,可以在-p处直接回车,再输入密码就是加密的了 2.远程登录 以连接本地为例 此处涉及到localh ...
- composer使用gitlab搭建私有库
{ "repositories": [ { "type": "vcs", // 使用gitlab固定 "url": &q ...
- Knative 初体验:Build Hello World
作者 | 阿里云智能事业群技术专家 冬岛 Build 模块提供了一套 Pipeline 机制.Pipeline 的每一个步骤都可以执行一个动作,这个动作可以是把源码编译成二进制.可以是编译镜像也可以是 ...
- Codeforces 778A:String Game(二分暴力)
http://codeforces.com/problemset/problem/778/A 题意:给出字符串s和字符串p,还有n个位置,每一个位置代表删除s串中的第i个字符,问最多可以删除多少个字符 ...
- easyui combobox name选择器
HTML: <input name="myinputdom" id="myinputdom" class="easyui-combobox my ...
- scrapy基础知识之制作 Scrapy 爬虫 一共需要4步:
1.新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 2.明确目标 (编写items.py):明确你想要抓取的目标 3.制作爬虫 (spiders/xxspider. ...