ASP.NET Core 技能知识点

  • 母板页_Layout.cshtml的作用是?

    类似于传统WebForm中的.master文件,起到页面整体框架重用的目地。

  • _Viewstart.cshtml的作用?

  • _Viewstart.cshtml的作用是在呈现View文件的时候的启动文件,无论哪个视图,当你要呈现这个视图的之前,_Viewstart.cshtml中的代码总会被先执行,正如把它的名字命名为_Viewstart哪样,这是Razor引擎故意设计的,因此如果项目中所有的视图都要包含某些公共逻辑,比如设置Layout = "~/Views/Shared/_Layout.cshtml";这样的语句,只需在_Viewstart.cshtml写一遍就可以了。

    注意,是在View被呈现的时候才会调用_Viewstart.cshtml,如果一个View是按照PartialView的方式输出的,则不会触发_Viewstart.cshtml中的代码。

  • _ViewImports的作用是?

  • ViewImports文件是我们可以编写代码并放置通用指令引入我们的视图所需的命名空间的地方。
    1. 存放通用的命名空间
    2. 使用@addTagHelper注册通用的TagHelper,以便view使用
  • IViewLocationExpander的作用是什么

  • 指定Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine实例用于确定视图搜索路径的视图位置扩展程序的协定
  • 自定义_ViewStart 和 _ViewImports 的目录位置

 相关资源:https://blog.csdn.net/wangyunfeis/article/details/77880038

示例项目源码:

  1. srcPresentationNop.Web.FrameworkThemesThemeableViewLocationExpander.cs
  2. srcOrchardCoreOrchardCore.DisplayManagementLocationExpanderThemeViewLocationExpanderProvider.cs

概念及作用:指定Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine实例用于确定视图搜索路径的视图位置扩展程序的协定。

如下这种自定义目录结构:CustomizedViewLocation/Reports/AdHocReports/EmployeeReport

    • 在哪种情况下,选择WCF比选择ASP.NET核心Web API更有利?

    • TagHelper中使用TagHelperOutput提供的SuppressOutput方法,禁止内容输出

TagHelper学习相关连接:https://www.cnblogs.com/shenba/p/6697024.html

利用定义个全新的Tag,看起来跟普通的HTML元素一样。如(<formbutton type="submit" bg-color="danger" />)Tag跟自定义的属性标记一样,都会被MVC Core框架识别出来,然后转化成最终的HTML

 

这里使用TagHelperOutput提供的SuppressOutput方法。

新建如下TagHelper

复制代码
[HtmlTargetElement(Attributes = "show-for-action")]
    public class SelectiveTagHelper : TagHelper
    {
        public string ShowForAction { get; set; }
        [ViewContext]
        [HtmlAttributeNotBound]
        public ViewContext ViewContext { get; set; }
        public override void Process(TagHelperContext context,
        TagHelperOutput output)
        {
            if (!ViewContext.RouteData.Values["action"].ToString()
            .Equals(ShowForAction, StringComparison.OrdinalIgnoreCase))
            {
                output.SuppressOutput();
            }
        }
    }
复制代码

这个TagHelper定义了其标签内容只有在当前Action跟目标Action一致的时候在显示内容,否则调用Suppress禁止内容输出

比如如下html标记

<div show-for-action="Index" class="panel-body bg-danger">
<h2>Important Message</h2>
</div>

指定了只有在Index action下才显示important Message

 

    • 使用依赖注入的好处是什么?对象的集中生命周期管理

    • 如何使用 使用await调用异步方法?

    • 使用DbContext的DbSet属性注册domain class

如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Data.Entity;
using TemplateTest1.Models;

namespace TemplateTest1
{
    public class EFContext : DbContext
    {
        public EFContext()
            : base("Default")
        {
            
        }
        
        public DbSet<AdGroupAdPositions> AdGroupAdPositions { get; set; }
        public DbSet<CompanyAddresses> CompanyAddresses { get; set; }
        public DbSet<AdPositions> AdPositions { get; set; }
        public DbSet<CompanyContacts> CompanyContacts { get; set; }
        //还有很多属性
    }
}

  

    • 在生产环境中运行时,使用什么决定应用程序正在使用的环境设置?

 

在以前的 ASP.NET 版本中,我们将应用程序配置设置(例如数据库连接字符串)存储在web.config文件中。 在 Asp.Net Core 中, 应用程序配置设置可以来自以下不同的配置源。

      • 文件(appsettings.json, appsettings..json) Environment环境不同,托管在对应环境。
      • User secrets (用户机密)
      • Environment variables (环境变量)
      • Command-line arguments (命令行参数)

 

相关连接:https://www.seoxiehui.cn/article-148803-1.html

 

 

  •  ASP.NET核心MVC web应用程序中使用Areas的主要好处?

区域提供了一种将大型web应用程序划分为易于管理的较小功能单元的方法

 

  •  将Microsoft.Extensions.SecretManager.Tools NuGet包添加到.NET core项目后,调用哪个.NET core命令行以显示为应用程序配置的user secrets?

假设说最后一项,每个开发要使用自己本机的数据库,你可能会说让每个人修改自己的web.config,在提交代码的时候不提交就行了。那么如果在web.config添加其他配置项的时候,显然不提交web.config文件不合理的。

现在,ASP.NET Core 提供了一种很优雅简洁的方式 User Secrets 用来帮助我们解决这个事情

  (相关连接:https://www.cnblogs.com/savorboard/p/dotnetcore-user-secrets.html

 

 

  • 您希望在您的web应用程序中使浏览器可以使用JavaScript文件。要在配置的启动类中添加的典型代码是什么?

  1. 静态文件:(如 HTML、CSS、图像和 JavaScript)是 ASP.NET Core 应用直接提供给客户端的资源。 需要进行一些配置才能提供这些文件。
  2. 提供静态文件:静态文件存储在项目的 Web 根目录中。 默认目录是 {content root}/wwwroot,但可通过 UseWebRoot 方法更改目录 。 
  3. 提供 Web 根目录外的文件:使用UseStaticFiles()的重载方法
    public void Configure(IApplicationBuilder app)
    {
        app.UseStaticFiles(); // For the wwwroot folder
    
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
            RequestPath = "/StaticFiles"
        });
    }

(微软相关连接:ASP.NET Core 中的静态文件专题 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-2.2

 

  • ASP.NET Core 如何添加对身份验证支持

(相关资源:https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/?view=aspnetcore-3.1

(在 ASP.NET Core 中配置证书身份验证:https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/certauth?view=aspnetcore-3.1

 

  • .net core Razor视图的TagHelper使用方法是?

TagHelper程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素

 

(相关资源:https://www.cnblogs.com/zmj520/p/9526538.html

(相关资源:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-3.1

  • Net Core MVC如何创建强类型视力,给视图传递数据,可视化模型数据

ASP.NET Core MVC 可以使用多种机制给视图传递数据。最健壮的方式是在视图中指定一个模型类型(通常称为视图模型,以区别于业务领域的模型类型),然后将此类型的实例从操作传递到视图。建议使用模型或视图模型将数据传递到视图。这允许视图利用强类型检查,可以使用 @model 指令为视图指定模型:

(相关资源:https://www.cnblogs.com/afei-24/p/11216803.html

 

 

  • 如何向.Net Core MVC添加基于约定的路由?(net core 3.0中有变化)

 

  • 您可以将应用程序中的功能公开为WebHook(钩子、通知员)。webhook的典型用途是什么?

相关资源:

  1. https://blog.csdn.net/feng98ren/article/details/81737287
  2. https://www.jianshu.com/p/55209f1031e8
  3. https://www.cnblogs.com/zhihuifan10/p/11114816.html

 

  • ASP.NET MVC5-ModelStateDictionary类ModelState模型验证

  • 相关资源:
    • 模型绑定:

      • 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。比如要创建用户,在form表单中填写用户名密码,在controller中直接使用User类接收就行了:

      • public ActionResult Create(User user){
             var name=user.Name;
             var pwd=user.Pwd;
             return View();
        }
      • 模型验证:
        • 经常使用的就是在模型类中给属性增加特性标签。如:
        • public class HomeFeedbackViewModel
              {
                  [Required(ErrorMessage ="尚有未填写项,请先完善")]
                  public string Name { get; set; }
                  [Required(ErrorMessage = "尚有未填写项,请先完善")]
                  [EmailAddress(ErrorMessage ="邮箱格式错误")]
                  public string Email { get; set; }
               } 
        • 判断当前模型是否通过了校验:ModelState.IsValid()
        • 返回失败校验错误信息:校验失败后,返回检验失败的提示
        • if (!ModelState.IsValid)
                      {
                          foreach (var key in ModelState.Keys)
                          {
                              var modelstate = ModelState[key];
                              if (modelstate.Errors.Any())
                              {
                                  return modelstate.Errors.FirstOrDefault().ErrorMessage;
                              }
                          }
                      }
        • 可以参考NopCommer项目中模型验证错误信息处理:PresentationNop.Web.FrameworkMvcModelBindingModelStateExtensions.cs
        •  

    • 参考文章:net MVC中的模型绑定、验证以及ModelState(https://blog.csdn.net/qq_34720759/article/details/79732476

  •  如果希望在处理View之前运行代码,应将该代码放在哪个文件中?

    • 在ASP.NET MVC 3.0及更高版本中,用Razor模板引擎新建项目后,Views目录下会出现一个这样的文件:_ViewStart.cshtml。 _viewstart.cshtml的作用

      • 1、_Viewstart.cshtml是一个在呈现View文件的时候的启动文件,会在所有View(.cshtml)被执行之前执行,主要用于一些不方便或不能在母版(_Layout.cshtml)中进行的统一操作,譬如你有很多个没有继承关系的母版或不使用母版的单页。

      • 2、在 _ViewStart.cshtml我们可以定义一些参数或做一些判断,定义过程和语法和普通的页面没有任何差别。

      • 3、注意,是在View被呈现的时候才会调用_Viewstart.cshtml,如果一个View是按照PartialView的方式输出的,则不会触发_Viewstart.cshtml中的代码。

      • 4、如果在View的某个目录下(例如Home目录)也有一个同名的_ViewStart.cshtml文件,那么这个_ViewStart也会被调用,但是最先调用的还是最外面的_ViewStart,然后再是Home目录下的_ViewStart。

 

  • 如果要在ASP.NET核心项目中使用客户端验证,通常需要jQuery包含哪些内容?

Asp.net core 数据验证 用法同Asp.net MVC类似。实质上在UI层加了一层js验证,在控制器加了一层后台验证。 UI层js验证是引用两个js脚本起作用

jquery.validate.js and jquery.validate.unobtrusive.js

  • IdentityUser

  • OpenID Connect

OpenID Connect是由OpenID基金会于2014年发布的一个开放标准, 简单的说就是, 它使用OAuth2来进行身份认证. OpenID Connect直接构建于OAuth2.0的基础之上, 与其兼容. 通常OpenID Connect是和OAuth2一同部署来使用的.

相关资源:https://www.cnblogs.com/cgzl/p/9231219.html

https://help.aliyun.com/document_detail/48019.html

 

 

  • 在复杂的REST API中,使用SQL Server或者Redis分布式缓存来存储不同服务器上的用户共享状态和会员信息

 

  • 在ASP.NET核心MVC应用程序中使用默认模型绑定时,模型绑定引擎将在请求中的一个或多个位置搜索需要填充操作参数的数据。默认情况下,它将在请求中的何处搜索?

 

 

 

  • What is Model State?

    • ModelState是Controller的一个属性,可以被继承自System.Web.Mvc.Controller的那些类访问。它表示在一次POST提交中被提交到服务器的 (1)键值对集合(a collection of name and value pairs),每个记录到ModelState内的值都有一个错误信息集。尽管ModelState的名字中含有“Model”,但它只有名称、值和错误集,与任何Model类都没有关系。         ModelState有两个作用:存储提交到服务器的值,以及存储与之相关联的验证错误集。

原文地址:https://www.cnblogs.com/gougou1981/p/12199658.html