一课一得ASP.NET

ASP.NET是由微软开发的一种用于构建Web应用程序的开发框架。它是在.NET平台上的一部分,提供了一套强大的工具和功能,使开发人员能够快速构建动态和交互性的Web应用程序。

ASP.NET基于服务器端技术,它使用C#或VB.NET等编程语言来编写代码。它采用了基于事件驱动的编程模型,通过与服务器交互来生成动态的HTML内容,并将其发送给客户端浏览器进行显示。

ASP.NET有多个版本,其中包括ASP.NET Web Forms、ASP.NET MVC和ASP.NET Core。每个版本都有不同的特点和用途,但它们都可以用于构建功能丰富的Web应用程序。

ASP.NET具有许多优点,包括良好的性能、可扩展性和安全性。它提供了丰富的现成控件和组件,简化了开发过程,并且具有强大的数据访问功能和集成支持。

总的来说,ASP.NET是一种功能强大、灵活且可靠的开发框架,非常适合构建各种规模的Web应用程序。

依赖注入

依赖注入(Dependency Injection,简称DI)是一种设计模式,其中一个类的依赖关系通过外部实体进行注入,而不是在类内部直接创建或管理依赖。这种模式的目的是降低代码的耦合性,提高代码的可测试性、可维护性和可扩展性。

在依赖注入中,一个类通常有一个或多个依赖的接口或抽象类。而这些依赖项的实例被注入到该类中,通常是通过构造函数参数、属性或方法参数进行注入。

依赖注入的优点有:
1. 降低了代码耦合:通过将依赖项的创建和管理移出类本身,类只关注自己的责任,而不需要知道如何创建或获取依赖项。
2. 提高了可测试性:通过使用依赖注入,可以轻松地替换依赖项的实现,以创建单元测试来验证类的行为,而无需依赖于具体的实现。
3. 增强了可维护性和可扩展性:依赖注入使代码更加模块化和松散耦合,更容易理解和修改,也更容易添加新的功能或依赖项。
4. 支持逆转控制(Inversion of Control):依赖项的创建和管理交由外部容器负责,类只需要声明它需要的依赖项,并由容器提供实例。

依赖注入在很多框架和库中都得到广泛应用,例如在ASP.NET Core、Spring、Angular等中都有支持依赖注入的机制。通过使用依赖注入,开发人员可以更好地组织代码,并获得更好的可测试性和可维护性。

中间件

中间件(Middleware)是一种常见的软件设计模式,用于处理请求-响应周期中的逻辑。在Web开发中,中间件是一种在服务器接收请求和发送响应之间执行的组件或函数。

中间件在请求和响应的处理管道中位于应用程序的核心逻辑之前或之后,可以进行各种操作,如身份验证、日志记录、错误处理、响应转换等。它们可以修改请求或响应、调用下一个中间件或结束请求-响应周期。

中间件的主要功能是在请求处理过程中进行拦截、处理和转换。它们可以执行一些与请求无关的通用处理逻辑,以实现应用程序的横切关注点(cross-cutting concerns),如安全性、性能、日志等。

在许多Web框架和平台中,中间件被广泛应用。例如,在ASP.NET Core中,开发人员可以使用中间件来处理路由、身份验证、授权、异常处理等。在Express.js中,中间件可以用于处理路由、错误处理、日志记录等任务。

中间件的好处在于它们提供了一种灵活和可扩展的方式来组织和重用代码。通过使用中间件,开发人员可以将应用程序逻辑分解为多个可重用的组件,使代码更加可读、可维护和可扩展。

总之,中间件是一种在Web开发中常用的设计模式,用于处理请求和响应的逻辑。它们可以在请求处理的不同阶段执行特定的操作,并允许开发人员有效地组织和扩展应用程序的功能。

SignalR通信

     

SignalR是一个用于实时Web应用程序的开发工具和库,它使服务器和客户端之间的双向通信变得简单和高效。SignalR使用了不同的底层传输技术,包括WebSocket、Server-Sent Events(SSE)、长轮询(Long Polling)等,以提供跨浏览器和跨平台的实时通信能力。

使用SignalR,可以轻松地构建具有实时功能的Web应用程序,例如聊天应用、实时数据更新、协同编辑等。它提供了简单明了的开发模型,无论是在服务器端还是客户端都可以使用相同的编程模型进行编码。

在SignalR中,服务器端会维护与客户端的连接,并通过Hubs或持久连接(Persistent Connections)来处理通信。Hubs是一种高级的抽象,它允许客户端和服务器端的方法之间进行直接调用。持久连接允许开发人员直接处理底层的连接和消息。

SignalR提供了一些重要的功能和特性,包括:
- 实时双向通信:SignalR使用底层传输技术提供实时、双向的通信能力,服务器端和客户端可以在任何时候进行通信。
- 自动传输协议选择:SignalR会自动选择最佳的底层传输协议,根据浏览器和服务器的支持情况来优化通信性能。
- 支持多平台和多浏览器:SignalR支持跨平台和跨浏览器的实时通信,包括Windows、Linux、macOS等操作系统,以及常见的浏览器如Chrome、Firefox、Safari等。
- 扩展性和可靠性:SignalR提供了扩展性和可靠性的支持,可以处理大规模的并发连接和消息传递。

总结起来,SignalR是一个强大的实时通信工具,能够简化服务器和客户端之间的双向通信。它具有广泛的应用领域,可用于构建各种实时Web应用程序,并提供了简单、高效和可靠的开发模型。

EFCore实体框架

Entity Framework Core(简称EF Core)是一个开源的对象关系映射(Object-Relational Mapping,ORM)框架,由微软提供。它是.NET平台上的一个全新版本,用于与关系型数据库进行交互,通过将数据库表映射为.NET对象,简化了数据存取的过程。

EF Core支持多种数据库引擎,包括SQL Server、MySQL、PostgreSQL、SQLite等。它提供了一个统一的API,使开发人员可以使用相同的代码来访问不同的数据库。

EF Core的主要特性包括:

1. 对象关系映射:EF Core允许开发人员定义实体类,并通过映射配置将这些实体类与数据库表关联起来。它会自动处理对象与数据库之间的转换和映射。

2. LINQ查询:EF Core支持使用Language-Integrated Query(LINQ)进行数据查询,开发人员可以使用面向对象的方式编写查询语句,而不是直接使用SQL语句。

3. 变更追踪:EF Core会自动跟踪实体对象的变更,并将这些变更自动同步到数据库。

4. 数据迁移:EF Core提供了数据迁移功能,可以帮助开发人员管理数据库结构的变更。可以通过命令行工具或API进行数据迁移的创建、应用和回滚操作。

5. 异步支持:EF Core提供了异步操作的支持,可以在数据库操作中使用异步方法,提高应用程序的性能和并发能力。

6. 扩展性:EF Core具有良好的扩展性,开发人员可以通过自定义配置和扩展方法来满足特定需求。

总的来说,EF Core是一个强大且灵活的ORM框架,可以方便地处理与关系型数据库的交互。它提供了简化数据访问的功能,使开发人员能够更加专注于业务逻辑,而不需要过多关注数据库细节。

LayUI

LayUI(LayUI开发框架)是一个简洁、易用的前端UI框架,由贤心(张琦)开发。它基于最新的Web标准,使用了HTML5和CSS3等技术,提供了丰富的UI组件和工具,可以帮助开发人员快速构建优雅而现代化的Web界面。

LayUI的主要特点包括:

1. 简单易用:LayUI提供了非常简洁的API和文档,开发人员可以快速上手并进行开发。它的设计理念是"低门槛、多扩展、极简",使开发更加高效。

2. 模块化:LayUI采用了模块化的设计,使用了CMD(Common Module Definition)规范,使开发人员可以按需加载所需的模块,避免了资源的冗余加载。

3. 响应式布局:LayUI提供了简洁而灵活的响应式布局系统,可以适应多种不同屏幕大小的设备,提供了一致的用户体验。

4. 丰富的组件:LayUI内置了大量常用的UI组件,如表格、表单、弹出层、导航、工具栏等,可以帮助开发人员快速构建各种交互式界面。

5. 主题定制:LayUI提供了多种主题样式供选择,并且支持自定义主题样式,开发人员可以根据自己的需求进行定制。

6. 兼容性好:LayUI兼容大部分主流浏览器,并且提供了针对性的优化策略,保证了在各种浏览器下的稳定运行。

通过使用LayUI,开发人员可以快速构建出美观、易用和响应式的Web界面,避免了从零开始编写大量的样式和脚本的工作。它适用于各种Web应用程序的开发,包括管理后台、企业应用、门户网站等。

权限控制

权限控制是一种用于管理和控制系统中用户对资源或功能的访问权限的机制。它确保只有授权的用户能够执行特定的操作,防止未授权用户获取敏感数据或执行不恰当的行为。权限控制在许多应用程序中都是至关重要的功能。

实施权限控制时,通常涉及以下几个方面:

1. 身份验证(Authentication):身份验证是确认用户身份的过程。通过用户名和密码、令牌、单点登录等方式,验证用户的身份信息。

2. 授权(Authorization):授权是确定用户是否具有访问资源或执行操作的权限。授权过程包括将用户分配到特定的角色或组,授予相应的权限。

3. 角色和权限管理:角色和权限管理是将用户组织到逻辑角色或组中,并为这些角色或组分配相应的权限。角色基于用户的职务、部门或其他属性进行定义,权限则表示用户可以执行的操作。

4. 资源保护:通过对资源进行保护,限制只有经过授权的用户可以访问特定的资源。资源可以是页面、功能模块、API接口或其他数据。

5. 细粒度控制:细粒度控制允许对不同的资源或功能进行不同级别的访问权限控制。例如,管理员可能具有更高级别的访问权限,而普通用户只能执行某些受限的操作。

6. 审计日志和监控:审计日志和监控功能记录和跟踪用户的操作,以便发现和调查潜在的安全问题。它可以帮助管理员了解系统中发生的事件和权限的使用情况。

权限控制可以在应用程序的各个层面进行实施,包括前端界面、后端服务和数据库访问等。常见的实现方式包括基于角色的访问控制(Role-Based Access Control,RBAC)、基于权限的访问控制(Permission-Based Access Control),以及细粒度的访问控制列表(Access Control Lists,ACL)等。

综上所述,权限控制是一种确保只有授权用户能够访问和执行特定资源或功能的重要机制。通过合理的身份验证、授权管理和资源保护,可以保证系统的安全性和完整性。


以下是学习过程中的一些代码

Public void ConfigureServices(IServiceCollection services)

{

    // 单纯引入核心MVC服务,只有核心功能

    services.AddMvcCore();

    // 一般用这个,功能多

services.AddMvc();

}

添加中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)

{

    if (env.IsDevelopment())

    {

        var developerExceptionPageOptions = new DeveloperExceptionPageOptions();

        // 显示代码行数

        developerExceptionPageOptions.SourceCodeLineCount = 10;

        app.UseDeveloperExceptionPage();

    }



    app.UseStaticFiles();

    app.UseMvcWithDefaultRoute();

}

MVC路由规则:/控制器名称/方法名称,(不区分大小写)

例如下面例子的路由是:/home/index

HomeController代码:

public class HomeController : Controller

{

    public string Index()

    {

        return "home controller";

    }

}

初步了解模型和依赖注入

定义模型

public class Student

{

    public int Id { get; set; }

    public string Name { get; set; }

    public string ClassName { get; set; }

    public string Email { get; set; }

}

定义接口

public interface IStudentRepository

{

    Student GetById(int id);

    void Save(Student student);

}

实现接口

目前还没接入数据库,定义一个假数据的类

public class MockStudentRepository : IStudentRepository

{

    private List<Student> _students;



    public MockStudentRepository()

    {

        _students = new List<Student>

        {

            new Student { Id=1, Name="小米", ClassName="红米", Email="hello1@deali.cn" },

            new Student { Id=2, Name="华为", ClassName="荣耀", Email="hello2@deali.cn" },

            new Student { Id=3, Name="oppo", ClassName="vivo", Email="hello3@deali.cn" },

        };

    }



    public Student GetById(int id)

    {

        return _students.FirstOrDefault(a => a.Id == id);

    }



    public void Save(Student student) => throw new NotImplementedException();

}

注册依赖注入

http://Asp.Net Core依赖注入容器注册服务有三种

AddSingleton

AddTransient

AddScoped

依赖注入的优点

低耦合

高测试性,更加方便进行单元测试

public void ConfigureServices(IServiceCollection services)

{

    services.AddMvc();

    // 注册依赖注入,将实现类与接口绑定

    services.AddSingleton<IStudentRepository, MockStudentRepository>();

在模型中使用依赖注入
public class StudentController : Controller
{
    private readonly IStudentRepository _studentRepository;

    // 通过构造函数注入的方式注入 IStudentRepository
    public StudentController(IStudentRepository studentRepository)
    {
        _studentRepository = studentRepository;

    }

    public JsonResult Index(int id)
    {
        return Json(_studentRepository.GetById(id));
    }
}
控制器入门
内容格式协商
在控制器方法中使用 ObjectResult 返回类型,支持内容协商,根据请求头参数返回数据,
// 支持内容格式协商
public ObjectResult Details(int id)
{
    return new ObjectResult(_studentRepository.GetById(id));
}
如:
Accept: application/xml
将返回xml格式。注:还要添加xml序列化器。
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        // 注册XML序列化器
        .AddXmlSerializerFormatters();
}
视图入门
将数据从控制器传递到视图的方法
前两种都是弱类型的
ViewData
ViewBag
强类型视图
ViewData
弱类型字典对象
使用string类型的键值,存储和chaxun
运行时动态解析
没有智能感知,编译时也没有类型检查
使用方法:
ViewData["Title"] = "学生视图";
ViewData["Model"] = model;
cshtml代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <h1>@ViewData["Title"]</h1>
    @{
        var student = ViewData["model"] as StudyManagement.Models.Student;
    }
    <div>姓名:@student.Name</div>
    <div>班级:@student.ClassName</div>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值