本文是在实践工作中遇到的一些问题记录,并给出是如何解决的,.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开发网站一些工作笔记的更多相关文章

  1. [译]ASP.NET Core揭秘 - Razor Pages

    原文 什么是Razor Pages? Razor pages是ASP.NET Core 2.0的新特性,它被设计用来更快的开发页面,比传统的MVC模式更便捷. 创建项目 为了使用Razor Pages ...

  2. asp.net core 的 razor pages 如何使用ajax调用后台方法

    Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容. 在网页加载时,服务器在向浏览器返回页面 ...

  3. 【翻译】介绍 ASP.NET Core 中的 Razor Pages

    介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core         译文地址:介绍 asp. ...

  4. ASP.NET Core Razor Pages 初探

    最近新建 Asp.net Core MVC 项目的时候不小心选错了个模板,发现了一种新的项目模板.它使用cshtml视图模板,但是没有Controller文件夹.后来才发现这是ASP.NET Core ...

  5. 学习 razor pages 指南

    这是一个系列,我打算把此人的系列翻译一下,学习技术的同时,顺便提高一下英文水平. 原文地址:https://www.learnrazorpages.com/ 前言 欢迎来学习 razor pages ...

  6. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  7. 基于ASP.NET Core 3.0快速搭建Razor Pages Web应用

    前言 虽然说学习新的开发框架是一项巨大的投资,但是作为一个开发人员,不断学习新的技术并快速上手是我们应该掌握的技能,甚至是一个.NET Framework开发人员,学习.NET Core 新框架可以更 ...

  8. ASP.NET Core 快速入门(Razor Pages + Entity Framework Core)

    引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了. 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试.总共有 8 篇文章,每篇 5~6 个小结,总截 ...

  9. ASP.NET Core Razor Pages

    Razor 页面是Asp.Net Core2.0新增的一个功能.Razor 页面是 ASP.NET Core MVC 的一个新特性,它可以使基于页面的编码方式更简单高效. 环境:vs2017 .net ...

随机推荐

  1. inno setup 配合istools

     istool,可以认为是inno setup的IDE吧   用用就知道了,istool用起来方便些,当然,脚本写好了,用不用istool就无所谓了 

  2. Spring Boot配置篇(基于Spring Boot 2.0系列)

    1:概述 SpringBoot支持外部化配置,配置文件格式如下所示: properties files yaml files environment variables command-line ar ...

  3. Centos7离线安装mysql8

    linux版本:Centois7 mysql版本:5.7 一.安装 1.下载mysql离线安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 选择如下: [ ...

  4. vue项目接入api接口

    我们在做项目时,一切基础在于数据上面,所以接入api接口是关键. 访问接口是我们会遇到跨域,而,vue-cli给我们提供了反向代理,所以我们只需要配置一下就可以了. 在config文件中找到index ...

  5. Python自学day-3

    一.集合     集合元素不会重复,而且是无序的.       定义集合: set_1 = {1,2,3,4,5}     set求交集(intersection): set1 = set([1,2, ...

  6. Java:synchronized关键字引出的多种锁

    前言 Java 中的 synchronized关键字可以在多线程环境下用来作为线程安全的同步锁.本文不讨论 synchronized 的具体使用,而是研究下synchronized底层的锁机制,以及这 ...

  7. 简单的 自动生成 二维码 PHP 方法

    方法一:<style type="text/css">.eweima{    width:200px; height:200px; margin:auto;}</ ...

  8. Disruptor 详解 一

    这篇博客将主要通过几个示例,简单讲述 Disruptor 的使用方法: 一.disruptor 简介 Disruptor 是英国外汇交易公司 LMAX 开发的一个无锁高性能的线程间消息传递的框架.目前 ...

  9. flask 高级编程 上下文与栈(转)

    转: https://www.cnblogs.com/wangmingtao/p/9372611.html 22.上下文与出入栈 22.1 请求过程 请求过来,flask会实例化一个Request C ...

  10. [golang]golang time.After内存泄露问题分析

    无意中看到一篇文章说,当在for循环里使用select + time.After的组合时会产生内存泄露,于是进行了复现和验证,以此记录 内存泄露复现 问题复现测试代码如下所示: package mai ...