母板页_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
文件是我们可以编写代码并放置通用指令以引入我们的视图所需的命名空间的地方。- 存放通用的命名空间
- 使用
@addTagHelper
注册通用的TagHelper
,以便view
使用
IViewLocationExpander
的作用是什么
- 指定
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine
实例用于确定视图搜索路径的视图位置扩展程序的协定 - 自定义
_ViewStart
和_ViewImports
的目录位置
相关资源:https://blog.csdn.net/wangyunfeis/article/details/77880038
概念及作用:指定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文件。要在配置的启动类中添加的典型代码是什么?
- 静态文件:(如 HTML、CSS、图像和 JavaScript)是 ASP.NET Core 应用直接提供给客户端的资源。需要进行一些配置才能提供这些文件。
- 提供静态文件:静态文件存储在项目的 Web 根目录中。 默认目录是
{content root}/wwwroot
,但可通过UseWebRoot
方法更改目录 。 - 提供
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的典型用途是什么?
相关资源:
https://blog.csdn.net/feng98ren/article/details/81737287
https://www.jianshu.com/p/55209f1031e8
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
项目中模型验证错误信息处理:Presentation\Nop.Web.Framework\Mvc\ModelBinding\ModelStateExtensions.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
。
模型状态验证发生在应用程序(或请求)生命周期的哪个阶段?
相关资源:https://www.cnblogs.com/alunchen/p/6252846.html(C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期))
https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/lifecycle-of-an-aspnet-mvc-5-application?view=vs-2019(ASP.NET MVC 5 应用程序的生命周期)
如果要在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
有两个作用:存储提交到服务器的值,以及存储与之相关联的验证错误集。