其他分享
首页 > 其他分享> > 第一章 项目结构

第一章 项目结构

作者:互联网

目录

结构图

项目结构说明

目录/文件 说明
依赖项 ASP.NET Core开发、构建和运行过程中的依赖项,一般都是NuGet包和一些SDK
Properties 配置,存放一些json文件,用于配置ASP.NET Core项目
Properties/launchSettings.json 启动配置文件,主要包括环境变量,开发端口
wwwroot 网站根目录,主要存放类似于CSS、JS、图片以及HTML文件等静态资源文件
Program.cs 这个文件包含了应用的入口方法Main方法,负责配置和启动应用程序
Startup.cs Startup.cs是项目的入口启动文件,主要用来注册服务和配置请求管道

launchSettings.json

这是一个项目启动文件,可以通过它来实现开发、测试、正式环境的自由切换,我们可以直接修改json文件,也可以通过VS提供的界面(右键当前项目->属性->调试)进行新增修改。环境变量ASPNETCORE_ENVIRONMENT可以用来控制使用哪个配置文件。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:18623/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express Test": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Test"
      }
    },
    "NetCoreDemo.Web": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:18624/"
    }
  }
}

wwwroot

wwwroot是网站的默认根目录, 它包含了所有的"前端"的静态文件, css、image、JS以及一个名为lib的文件夹.lib中默认内容是bootstrap和jquery.
在Startup中, 会调用一个无参数的UseStaticFiles()方法, 将此目录标记到网站根目录.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
}

_Layout.cshtml

布局模板, 简单的说就是所有采用此模板的页面拥有大体一致的布局, 举个例子, 我们的页面经常是这样的结构:

Header、Footer和Navigation基本上是不变的, 打开_Layout.cshtml, 我们可以看到一个@RenderBody()标识, 它其实就是来定义Content部分的。
还有类似@RenderSection("Scripts", required: false)这样的标识, 引用此模板的页面可以将该页的特定JS的引用放在对应的Section中.

_ValidationScriptsPartial.cshtml

<environment include="Development">
    <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>

打开此页面, 可以看到一些这样的引用, validation 顾名思义是用来做验证的。
我们通过如下代码引用_ValidationScriptsPartial.cshtml, 也就是采用jquery-validation来做验证

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
注意: 默认的_Layout模板是未引用的, 因为不是所有页面都需要有输入操作.

Model中设置验证方式

public class User
{
    [Key]
    public string Id { get; set; } = Guid.NewGuid().ToString();
    [Display(Name = "姓名")]
    [Required(ErrorMessage = "姓名不能为空!")]
    public string Name { get; set; }
    [Display(Name = "账号")]
    [Required(ErrorMessage = "账号不能为空!")]
    public string Account { get; set; }
    [Display(Name = "密码")]
    [Required(ErrorMessage = "密码不能为空!")]
    public string Password { get; set; }
}

在页面添加验证

<div class="form-group">
    <label asp-for="Name" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
</div>

_ViewImports.cshtml

有点像Framework版本的MVC项目中的View目录下的那个Web.config

在View中引用Model等的时候, 为了避免重复写using,可以在这个文件中添加引用

@using NetCoreDemo.Web
@using NetCoreDemo.Web.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

_ViewStart.cshtml

这个打开就一句话,当然还可以在这写一些其他需要"通用"执行的内容.

@{
    Layout = "_Layout";
}

这个页面中的内容会在所有View执行前执行, 现在这句话就是给所有的View一个默认的Layout模板.

所以在View中这样写

@{
    Layout = null;
}

和这样写

@{

}

是不一样的, 第一种是告诉这个View不采用任何模板.

第二种写法是什么都不干, 所以它会采用_ViewStart.cshtml中指定的模板.

Program.cs

这是应用的起点, 启动后通过UseStartup()指定下文的Startup启动文件进行启动.其中CreateWebHostBuilder方法构建了Kestrel服务器,负责监听,转发请求与响应客户端。.net core程序本质上是一个控制台应用程序,就算发布到IIS上,也只是用IIS做反向代理

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace HelloWorld
{
    public class Startup
    {
        // 该方法在运行时被调用。
        // 可以使用该方法将服务添加到容器中
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // 该方法在运行时被调用
        // 可以使用该方法来配置 HTTP 请求管道
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }
    }
}

ConfigureServices 方法

ConfigureServices 方法用于定义应用程序所需要的服务,例如 ASP.NET Core MVC 、Entity Framework Core 和 Identity 等等

public void ConfigureServices(IServiceCollection services){}

Configure 方法

Configure定义请求管道中的中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
    
}

参考

https://baijiahao.baidu.com/s?id=1620334909551970021&wfr=spider&for=pc

标签:Layout,项目,第一章,cshtml,using,页面,public,模板,结构
来源: https://www.cnblogs.com/mygoal/p/14814753.html