ASP.NET CORE 学习笔记

1.什么是asp.net core 

ASP.NET Core是微软推出的下一代Web应用程序开发框架。与传统的ASP.NET不同,ASP.NET Core是一个跨平台的开发框架,可以在Windows、Linux和macOS等多个操作系统上运行。它采用开放源代码的方式发布,并且具有更高的性能、更好的可伸缩性和更好的模块化能力。

ASP.NET Core使用了一种轻量级的、基于中间件的架构,允许开发人员根据自己的需求组合各种功能模块。它支持多种编程语言,包括C#、VB.NET和F#等,并且内置了对ASP.NET Web API和SignalR等现代Web开发技术的支持。

ASP.NET Core提供了许多新特性和改进,包括更快的性能、更好的响应性、内置的依赖注入、跨平台开发、配置管理等。它还支持使用开放标准的技术,如JSON、REST、OAuth等,并提供了丰富的工具和库来简化开发过程。总的来说,ASP.NET Core是一个现代化、灵活且强大的Web应用程序开发框架,被广泛应用于构建各种类型的Web应用程序和API。

2.如何构建一个asp.net core的mvc程序

要构建一个ASP.NET Core的MVC(Model-View-Controller)程序,你可以按照以下步骤进行操作:

  1. 安装.NET Core SDK:在开始之前,请确保你已经安装了最新版本的.NET Core SDK。你可以从微软的官方网站(https://dotnet.microsoft.com/download)上下载并安装适合你操作系统的SDK。

  2. 创建一个MVC应用程序:在命令行终端或控制台中,使用dotnet命令创建一个新的ASP.NET Core MVC项目。运行以下命令:

    dotnet new mvc -o MyMvcApp
    

    这会在一个名为MyMvcApp的新文件夹中创建一个基本的MVC应用程序。

  3. 进入应用程序文件夹:运行以下命令进入应用程序文件夹:

    cd MyMvcApp
    
  4. 启动应用程序:运行以下命令以启动应用程序:

    dotnet run
    

    这将启动应用程序并在本地主机上的默认端口上运行。

  5. 在浏览器中访问应用程序:打开你喜欢的浏览器,并访问http://localhost:5000,你将看到默认情况下生成的ASP.NET Core MVC欢迎页面。

  6. 开始编码:现在你可以使用任何你熟悉的编辑器或集成开发环境(如Visual Studio Code、Visual Studio等)来编辑应用程序代码。你可以添加控制器、视图和模型等来定义MVC架构。

    • 控制器:控制器处理HTTP请求,决定应该如何响应这些请求,并将数据传递给视图。你可以在Controllers文件夹中创建新的控制器。

    • 视图:视图是用户界面的一部分,用于呈现数据和接收用户输入。你可以在Views文件夹中创建新的视图。

    • 模型:模型定义了应用程序的业务逻辑和数据结构。你可以在Models文件夹中创建新的模型。

  7. 运行应用程序:在编辑完成后,你可以使用dotnet run命令重新运行应用程序,然后在浏览器中查看更改。

这只是一个简单的起始点,ASP.NET Core MVC提供了许多其他功能和选项,例如路由、身份验证、中间件等,你可以根据需求进一步学习和深入使用。你可以查阅微软的官方文档(https://docs.microsoft.com/aspnet/core/mvc/)以获取更多详细信息和示例代码。

3.builder.Services.AddControllersWithViews();

Services.AddControllersWithViews()方法是ASP.NET Core中用于将控制器和视图相关的服务添加到应用程序依赖注入(DI)容器中的方法。通过调用这个方法,你可以方便地注册控制器及其相关的特性,以及视图和页的支持。

这个方法通常在Startup.cs(Program.cs)文件的ConfigureServices方法中调用,用于配置应用程序的服务。

4.builder.Services.AddSession

builder.Services.AddSession 是用于在 ASP.NET Core 应用程序中添加会话支持的方法。

通过调用 AddSession 方法,您可以配置应用程序以存储和管理用户会话数据。这在许多应用程序中非常有用,因为它允许您在用户访问站点期间跨多个请求共享和存储数据。

要使用 AddSession 方法,您需要确保已引用 Microsoft.Extensions.DependencyInjection 命名空间,并通过 IServiceCollection 实例(通常称为 services)调用该方法。例如:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 添加会话支持
        services.AddSession();
        // ...
    }

    public void Configure(IApplicationBuilder app)
    {
        // ...
        app.UseSession();
        // ...
    }
}

在 ConfigureServices 方法内调用 AddSession 以配置会话服务,然后在 Configure 方法内调用 UseSession 以启用会话支持。

请注意,要使用会话功能,还需要将应用程序配置为使用 Cookie 来存储会话标识符。这可以通过设置 CookiePolicyOptions 和 SessionOptions 的相关属性来完成。根据您的需求,您还可以进一步自定义会话功能。

5.builder.Services.AddSingleton<IAdminService, AdminService>();

builder.Services.AddSingleton<IAdminService, AdminService>(); 是在 ASP.NET Core 中注册一个单例服务的方法。

通过调用 AddSingleton 方法,并指定接口类型 IAdminService 和具体实现类型 AdminService,您可以将 AdminService 注册为一个单例服务。这意味着每个应用程序只会创建一个 AdminService 实例,并在整个应用程序的生命周期内共享使用该实例。

要使用 AddSingleton 方法,您需要确保已引用 Microsoft.Extensions.DependencyInjection 命名空间,并通过 IServiceCollection 实例(通常称为 services)调用该方法。例如:

using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册 AdminService 单例服务
        services.AddSingleton<IAdminService, AdminService>();
        // ...
    }
}

在上述代码中,IAdminService 是接口,AdminService 是实现这个接口的具体类。services.AddSingleton<IAdminService, AdminService>() 注册了 AdminService 类型的实例作为 IAdminService 接口的一个单例服务。因此,当其他地方通过构造函数或依赖注入获取 IAdminService 时,将获得同一个 AdminService 的实例。

使用单例服务可确保在整个应用程序中共享相同的服务实例,这对于那些需要保持状态或共享数据的服务很有用。

6.var app = builder.Build();

var app = builder.Build(); 是在 ASP.NET Core 中构建应用程序的方法。

在 ASP.NET Core 中,我们使用 WebHostBuilder 来创建和配置应用程序的主机。而 builder.Build() 方法则是用来构建该主机并返回一个 IWebHost 实例,该实例可以用于启动和运行应用程序。

通过调用 builder.Build() 方法,可以将先前使用 WebHostBuilder 进行的配置应用到主机中,并生成一个可用于运行应用程序的 IWebHost 对象。

通常,builder 是一个 WebHostBuilder 对象,它在应用程序的 Program.cs 文件中创建和配置。例如:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = CreateHostBuilder(args);
        var app = builder.Build();

        // 其他逻辑

        app.Run();
    }

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

上述代码中的 CreateHostBuilder 方法是常见的创建和配置 WebHostBuilder 的方法。调用 builder.Build() 方法返回一个 IWebHost 实例,并将其赋值给 app 变量。之后,您可以通过调用 app.Run() 方法来运行应用程序。

7.app.MapControllerRoute( name: "default", pattern: "{controller=Admin}/{action=Login}/{id?}");

app.MapControllerRoute() 是在 ASP.NET Core 中设置默认路由的方法。

默认情况下,ASP.NET Core 使用路由来确定如何处理传入的 HTTP 请求。MapControllerRoute() 方法允许您定义一个路由规则,用于将请求映射到相应的控制器和操作方法。

在上述代码中,app.MapControllerRoute() 方法用于设置默认路由。该方法接受以下参数:

  • name(可选):路由名称,这在后续的代码中可能需要引用。在此示例中,路由名称设置为 “default”。
  • pattern:路由模板,它指定了匹配请求的路由规则。在此示例中,路由模板设置为 “{controller=Admin}/{action=Login}/{id?}”。
  • defaults(可选):包含有关默认控制器、默认操作方法和其他路由参数的对象。在此示例中,未提供 defaults 参数。

在给定的路由模板中,“{controller=Admin}”表示将匹配到的请求路由到 Admin 控制器。同样地,“{action=Login}”表示将匹配到的请求路由到 Admin 控制器中的 Login 操作方法。最后,“/{id?}” 表示可选的 id 参数。

使用 app.MapControllerRoute() 方法在 ASP.NET Core 应用程序中进行路由配置后,当收到匹配路由模板的请求时,系统将自动将其路由到正确的控制器和操作方法。

8.构造函数依赖注入

构造函数依赖注入(Constructor Dependency Injection)是一种实现依赖注入(Dependency Injection)的方法,它通过在类的构造函数中声明它所依赖的其他对象,来实现对这些依赖的注入。

在依赖注入的概念中,类的依赖关系不由类本身负责创建和管理,而是由外部容器负责创建,并在创建类的实例时自动将依赖项注入到类的构造函数中。

使用构造函数依赖注入的好处包括:

  1. 显式依赖:通过在构造函数中声明依赖,可以更清晰地了解一个类需要哪些外部依赖项。
  2. 可测试性:通过将依赖项传递给构造函数,可以轻松地在单元测试中模拟这些依赖项,从而提高代码的可测试性。
  3. 松耦合性:依赖注入使得类与其依赖项之间的耦合度更低,提供了更高的灵活性和可维护性。

以下是一个简单的示例,展示了如何在构造函数中使用依赖注入:

public class MyService
{
    private readonly IMyDependency _dependency;

    public MyService(IMyDependency dependency)
    {
        _dependency = dependency;
    }

    public void DoSomething()
    {
        // 使用依赖项进行操作
        _dependency.SomeMethod();
    }
}

public interface IMyDependency
{
    void SomeMethod();
}

public class MyDependency : IMyDependency
{
    public void SomeMethod()
    {
        // 实现方法逻辑
    }
}

在上述示例中,MyService 类通过在构造函数中声明一个依赖项 IMyDependency,来实现对 IMyDependency 的注入。这使得 MyService 能够调用 _dependency 上的方法,而不需要关心如何创建和实例化 IMyDependency

在依赖注入容器(如ASP.NET Core的内置容器)配置完成后,您可以通过请求 MyService 的实例时,容器会自动解析并提供正确的依赖项。

这只是依赖注入的一个简单示例,实际上,依赖注入还可以支持更复杂的依赖关系和生命周期管理。不同的依赖注入容器和框架可能有不同的用法和配置方式,您可以参考相应框架或容器的文档来了解更多详细信息。

9.IActionResult

IActionResult 是 ASP.NET Core 中的一个接口,用于表示控制器方法的执行结果。

在 ASP.NET Core 中,控制器方法通常会返回 IActionResult 或其实现类的实例作为方法的执行结果。IActionResult 接口定义了对控制器方法结果进行响应的各种方法和属性。

IActionResult 接口提供了以下几种常用的实现类:

  1. ViewResult:表示要返回一个视图结果,该结果将呈现为 HTML 并返回给客户端。
  2. JsonResult:表示要返回一个 JSON 结果,该结果将被序列化为 JSON 字符串并返回给客户端。
  3. RedirectResult:表示要将客户端重定向到其他 URL。
  4. StatusCodeResult:表示要返回指定的 HTTP 状态码给客户端。
  5. FileResult:表示要返回指定的文件给客户端。
  6. ContentResult:表示要返回指定的文本内容给客户端。

除了上述几种常用的实现类之外,您还可以创建自定义的 IActionResult 实现类,以满足特定的业务需求。

在控制器方法中,您可以根据具体的业务逻辑和需求,选择合适的 IActionResult 实现类来表示方法的执行结果,并返回给客户端。

以下是一个示例控制器方法,演示了如何返回 IActionResult 实例:

public IActionResult Index()
{
    // 返回一个视图结果,将呈现 Index.cshtml 视图并返回给客户端
    return View();

    // 或者返回一个重定向结果,将客户端重定向到其他 URL
    // return Redirect("/other/page");

    // 或者返回一个 JSON 结果,将对象序列化为 JSON 并返回给客户端
    // var data = new { name = "John", age = 30 };
    // return Json(data);
}

在上述示例中,Index 方法可以根据需求选择返回 ViewResultRedirectResult 或 JsonResult 等不同的 IActionResult 实现类来表示方法的执行结果。

10.

HttpContext.Request.Cookies["loginId"]

HttpContext.Request.Cookies["loginId"] 是 ASP.NET Core 中用于获取 HTTP 请求中名为 loginId 的 Cookie 值的代码。

在 ASP.NET Core 中,HttpContext 表示当前 HTTP 请求的上下文信息,其中 Request 属性代表了当前 HTTP 请求的信息。通过访问 Cookies 属性,您可以获取 HTTP 请求中包含的所有 Cookie 值的集合,通过指定对应的 Cookie 名称,您可以获取指定的 Cookie 值。

在上述代码中,HttpContext.Request.Cookies 表示获取当前 HTTP 请求中包含的所有 Cookie 值的集合。通过访问 ["loginId"] 属性,该代码获取名为 loginId 的 Cookie 值,并将其作为字符串类型返回。如果 Cookie 不存在,则返回 null

这种方式通常用于在 ASP.NET Core 应用程序中实现身份验证和授权,例如,您可以在用户登录时为其分配一个名为 loginId 的 Cookie,并在随后的每个请求中检查该 Cookie 以确认用户身份。当获取到登录用户的 loginId 后,您可以使用它进行后续的操作,例如从数据库中获取用户的详细信息,或者验证用户是否有权访问该页面等。

10.if($.cookie("loginId")!=undefined){ $('#inputLoginId').val($.cookie('loginId')); }

这段代码使用了 jQuery 库中的 $.cookie() 方法读取 Cookie,然后根据 Cookie 中保存的数据填充 HTML 页面中的输入框。

具体而言,if($.cookie("loginId")!=undefined) 判断 Cookie 名为 “loginId” 是否存在或者是否定义。如果该 Cookie 存在,则条件成立,将使用 jQuery 的 val() 方法将 "loginId" Cookie 中的值填充到 id 为 inputLoginId 的文本输入框中,以便用户可以方便地登录或注册。

以下是一个简单的示例,展示了如何使用 JavaScript 和 jQuery 库读取 Cookie 值:

// JavaScript 示例
if ($.cookie("username") !== undefined) {
  console.log("Welcome back, " + $.cookie("username") + "!");
  $('input[name="username"]').val($.cookie("username"));
  $('input[name="remember-me"]').prop("checked", true);
}

在上述示例中,如果名为 "username" 的 Cookie 存在,则使用 jQuery 库中的 val() 方法将其值填充到 HTML 表单中的 username 输入框中,并且选中 “记住我” 复选框。如果 Cookie 不存在,则代码不执行相应的操作,用户需要手动输入用户名并选择是否记住登录状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值