Asp.NetCore3.1

 Asp.NetCore3.1

.NetCore Framework 都属于框架 并列:大家是不同的框架,都有自己的CLR。

Asp.Net Core是一套Web开发框架

全家桶--.NetFramework---配置齐全直接用—但是会付出额外成本(淹没陈本) 

自选式—Asp.NetCore—只有基本骨架,需要自行配置—要什么组装什么---最小声明---组件化开发

 https://github.com/aspnet/AspNetCore  源码地址

 创建Web项目示例

 比如我们创建一个Asp.Net Core Web的项目,是支持MVC的,:

 选择3.1版本:

 

 创建完成:

 

我们往页面传几个值看看:

复制代码
public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        { 
            base.ViewBag.User1 = "天天";
            base.ViewData["User2"] = "ganet";
            base.TempData["User3"] = "jerry"; 

            object name = "ivy";

            return View(name);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
复制代码

View层

复制代码
@model System.String
@using Microsoft.AspNetCore.Http;
@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>
<h2>@base.ViewBag.User1</h2>
<h2>@base.ViewData["User2"]</h2>
<h2>@base.TempData["User3"]</h2>
<h2>@Model</h2>

<h2>@base.Context.Session.GetString("User4")</h2>
复制代码

 

结果:

 

 Asp.Net Core需要配置Session才能用

 需要在下面配置:

 示例:

Control层

复制代码
 public IActionResult Index()
        { 
            base.ViewBag.User1 = "天天";
            base.ViewData["User2"] = "ganet";
            base.TempData["User3"] = "jerry";

            //session还需要配置? 以前直接用就好了 ashx默认没有session
            string result = base.HttpContext.Session.GetString("User4");
            //声明接口时,只提供最基本的诉求,扩展性的都没有了,
            if (string.IsNullOrWhiteSpace(result))
            {
                base.HttpContext.Session.SetString("User4", "session test");
            }

            object name = "ivy";

            return View(name);
        }
复制代码

View

复制代码
@model System.String
@using Microsoft.AspNetCore.Http;
@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
    <h2>@base.ViewBag.User1</h2>
    <h2>@base.ViewData["User2"]</h2>
    <h2>@base.TempData["User3"]</h2>
    <h2>@Model</h2>
    <h2>@base.Context.Session.GetString("User4")</h2>

</div>
复制代码

 

  结果:

 

 日志记录

 可以继续使用log4来实现 

 

(1) 我们可以通过Program方式来使用,在Program类中:

复制代码
 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();//启动个kestrel
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)//就是指定kestrel
                                           .ConfigureLogging(loggingBuilder =>
                                               {
                                                   loggingBuilder.AddLog4Net();//需要配置文件
                                               })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();//靠Startup来串起来MVC
                });
    }
复制代码

 

配置文件log4net.Config: 

复制代码
<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <!-- Define some output appenders -->
    <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log\log.txt" />
        <!--追加日志内容-->
        <appendToFile value="true" />

        <!--防止多线程时不能写Log,官方说线程非安全-->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

        <!--可以为:Once|Size|Date|Composite-->
        <!--Composite为Size和Date的组合-->
        <rollingStyle value="Composite" />

        <!--当备份文件时,为文件名加的后缀-->
        <datePattern value="yyyyMMdd.TXT" />

        <!--日志最大个数,都是最新的-->
        <!--rollingStyle节点为Size时,只能有value个日志-->
        <!--rollingStyle节点为Composite时,每天有value个日志-->
        <maxSizeRollBackups value="20" />

        <!--可用的单位:KB|MB|GB-->
        <maximumFileSize value="3MB" />

        <!--置为true,当前最新日志文件名永远为file节中的名字-->
        <staticLogFileName value="true" />

        <!--输出级别在INFO和ERROR之间的日志-->
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="ALL" />
            <param name="LevelMax" value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
        </layout>
    </appender>
    <root>
        <priority value="ALL"/>
        <level value="ALL"/>
        <appender-ref ref="rollingAppender" />
    </root>
</log4net>
复制代码

 (2)Startup中实现

复制代码
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            // 使用Log4日志
            loggerFactory.AddLog4Net();

            app.UseSession();

            app.UseHttpsRedirection();
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot"))
            });

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
复制代码

 (3)用法

复制代码
  public class FirstController : Controller
    {
        private readonly ILogger<FirstController> _logger;
        private readonly ILoggerFactory _loggerFactory;
        public FirstController(ILogger<FirstController> logger,
            ILoggerFactory loggerFactory)
        {
            _logger = logger;
            this._loggerFactory = loggerFactory;
        }

        public IActionResult Index()
        {
            // 第一种用法
            this._logger.LogWarning("This is FirstController-Index");
            // 第二种用法
            this._loggerFactory.CreateLogger<FirstController>().LogWarning("This is FirstController-Index 1");

            return View();
        }
    }
复制代码
posted @   安静点--  阅读(211)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示