源栈培训:ASP.NET MVC-6:配置和日志

更多
2019年08月05日 22点45分 作者:叶飞 修改

Config配置文件


作用:提供一个集中的位置用于存放项目的各种配置信息

特点:

  • 项目只在启动时读取一次就将其内容缓存(高性能)
  • 但在配置上面所做的更改不需要重启项目就可以立即生效

machine.config和web.config(或:app.config)

  • 当.NET安装的时候,就自动的带了一个machine.config,放置在C:\WINDOWS\Microsoft.NET\Framework\[Version]\CONFIG目录下,该文件包含了所有的全局的配置
  • 该目录下同时还有一些web.config文件,该文件可覆盖machine.config里面的配置
  • 网站根目录下的web.config,又可以覆盖上述web.config里的配置(最常用的配置修改位置
  • 同时,网站的根目录以下,每一级目录又都可以有一个web.config,下级目录的web.config就可以覆盖上一级目录……
关键结构:section和sectionGroup
<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="entityFramework" ……/>
  </configSections>
  <entityFramework>
    <providers>
      <provider ……/>
    </providers>
  </entityFramework>
</configuration>

演示:略


web.config

XML格式的ASP.NET项目的配置文件(最新版的core已使用json格式)

常用的有:

  • debug/release
        <compilation debug="true" targetFramework="4.6.1"/>
  • 数据库连接字符串
      <connectionStrings>
        <add name="SQLDbContext" connectionString="Data Source=(localdb)\ProjectsV13;Initial Catalog=17bangMVC;
             Integrated Security=True;User=sa;Password=sasa;" providerName="System.Data.SqlClient"/>
      </connectionStrings>
    然后,使用:
                string connectionString = ConfigurationManager.ConnectionStrings["17bang_dev"].ConnectionString;
    
    在.NET core中可:
    1. 使用依赖注入,在需要获取connection string的类中添加构造函数:
              private IConfiguration _configuration { get; }
              public SQLContext(IConfiguration configuration)
              {
                      _configuration = configuration;
              }
      然后再调用:
                  string connectionString = _configuration.GetConnectionString("RegisterContext");
      
    2. 或者,直接构造一个Configuration实例
              //获取appsettings.json在当前项目中的位置
              internal static string projectDirectory =
                  //CurrentDirectory:bin\debug\netcoreapp2.1
                  Directory.GetParent(Environment.CurrentDirectory)   
                  .Parent.Parent.FullName;
      
              internal static SQLContext context 
                  = new SQLContext(new ConfigurationBuilder()
                      .SetBasePath(projectDirectory)  
                      .AddJsonFile("appsettings.json")
                      .Build());  //Build()一个Configuration实例
  • 自定义错误
    aspxerrorpath
        <customErrors mode="On">
          <error statusCode="404" redirect="/Error/404"/>
        </customErrors>
    理解:mode=On/Off/RemoteOnly的意义。尤其是RemoteOnly,浏览器没有和MVC项目在同一条机器上就是remote
    跳转到自定义错误页面后,MVC会自动在url后面加上参数aspxerrorpath,如:

    注意避免:循环错误,即:自定义错误页面上面仍然有错误!(一般错误页面都使用静态页面)
    和HandleErrorAttribute的配合:
    1. mode="Off"的时候,HandleErrorAttribute不会起作用
    2. HandleErrorAttribute仅处理500的错误
    另外,HandleErrorAttribute:
    1. 默认注册在~/App_Start/FilterConfig.cs下
              //全局注册,作用于所有的Action
              public static void RegisterGlobalFilters(GlobalFilterCollection filters)
              {
                  filters.Add(new HandleErrorAttribute());
              }
    2. HandleErrorAttribute默认的错误页面是:~/Views/Shared/Error.cshtml

  • 缓存配置
    <system.web>
        <caching>
          <outputCacheSettings>
            <outputCacheProfiles>
              <add name="Cache1Minute" duration="60" varyByParam="none"/>
            </outputCacheProfiles>
          </outputCacheSettings>
        </caching>
    </system.web>
    [OutputCache(CacheProfile = "Cache1Minute")]
  • session
        <sessionState timeout="20" mode="InProc"/>
    
  • 自定义
      <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
      </appSettings>
  • 其他第三方插件要求的配置,比如log4net(略)

错误日志:Elmah

MVC中应用,原文4步,实际上只需要2步:

  1. 添加引用(会自动修改web.config)
  2. 修改web.config,添加logger。以下演示为使用xml文件记录:
    <elmah>
      <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
    </elmah>

还可以进行错误过滤(某些异常不进行处理),在Global.asax中添加:

        void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
        {
            if (e.Exception.GetBaseException() is HttpRequestValidationException)
            {
                e.Dismiss();
            }
        }

了解更多:MSDN文档


作业

  • 使用配置文件中的(而不是C#代码中)数据库连接字符串,连接数据库
  • 模仿一起帮,为404错误和500错误指定错误页面
  • 将之前的output cache配置为cache profile
  • 在个人资料中上传用户头像(已学前端同学需使用bootstrap样式),注意:
    1. 前台添加Required和文件类型验证
    2. 后台验证文件大小/类型
    3. 解决文件名冲突的问题
    4. 按年月日(或者你自己的方案)均匀分布用户上传文件,保证其索引速度
    5. 不要忘了数据库记录下文件路径,用于前台显示
  • 配置好ELMAH,能够记录所有错误信息



源栈培训 ASP.NET 配置 文件上传
赞: 3 踩: 2

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 1
2019年08月09日 15点50分 --- 第 1 楼 --- 推荐 小屿
 

ASP.NET


RazorPage

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

其他Web项目

包括WebForm和WebApi

全部
关键字



帮助

反馈