首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,610 阅读
2
Mac打印机设置黑白打印
4,949 阅读
3
修改elementUI中el-table树形结构图标
4,895 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,674 阅读
5
intelliJ Idea 2022.2.X破解
4,357 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
IntelliJ IDEA
微信小程序
Laughing
累计撰写
627
篇文章
累计收到
1,421
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
224
篇与
的结果
2017-11-23
asp.net core读取配置文件公共方法
在asp.net core中,我么在startup.cs或者控制器中可以通过依赖注入或者其他方法很方便的读取配置文件的内容,但是在实际项目开发过程中,我们肯定不是这么简单的处理。一般情况下,我们都会通过一个公共的方法完成配置文件的读取,有时候还需要将配置文件映射到对应的实体类,方便其他人员调用。这里我们通过将公共方法放到单独的类库,让后将配置文件转换成强类型的实体类首先我们添加对应的类库项目然后添加nuget包对于如何创建项目,这里不再赘述,主要说明需要引入的包如下:Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions修改配置文件修改自己的配置文件,加入相应的配置信息,比如我的配置文件如下{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "SysConfig": { "LoginProvider": "Cookie" //登陆提供者模式:Session、Cookie } }根据配置文件建立实体类using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace me.lisen.Bussiness.Entity { public class SysConfig { public string LoginProvider { get; set; } //登陆提供者模式:Session、Cookie } }建立公共方法,获取配置文件/* * 获取配置文件 * @lisen */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using Microsoft.Extensions.Configuration; using System.IO; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using me.lisen.Bussiness.Entity; namespace me.lisen.FrameworkCore.Util.config { public static class ConfigManager { static IConfiguration config = null; static ConfigManager() { string currentClassDir = AppContext.BaseDirectory; if (config == null) { config = new ConfigurationBuilder() .SetBasePath(currentClassDir) .AddJsonFile("appsettings.json", false, true) .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true }) .Build(); } } /// <summary> /// 获取系统公共配置文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public static T GetValue<T>() where T : class, new() { T sysConfig = new T(); try { config.GetSection("SysConfig").Bind(sysConfig); } catch (Exception ex) { sysConfig = null; } return sysConfig; } /// <summary> /// 获取单一节点配置文件 /// </summary> /// <param name="key">节点,如果是多级节点需要按照:分隔的方式传递</param> /// <returns></returns> public static string GetValue(string key) { return config.GetSection(key).Value.ToString().Trim(); } } }界面调用界面调用就比较简单了,在cshtml页面,直接调用公共方法,获取参数即可
2017年11月23日
1,316 阅读
0 评论
1 点赞
2017-11-13
jsp常见的指令
在前面的章节中,我们介绍了jsp的include的指令,除了包含页面的指令,jsp还有一些其他的指令,比如重定向、使用bean以及获取、设置属性等指令。forward指令forward指令用于页面重定向,首页代码index.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true" isThreadSafe="true" autoFlush="true" info="我是首页" errorPage="errorPage.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首页</title> </head> <body> <form action="index.jsp" name="form1" method="post"> <input type="text" name="userName" id="UserName"> <input type="submit" value="提交"> <jsp:forward page="forward.jsp"></jsp:forward> </form> </body> </html>跳转页面的代码forward.jsp<%@page language="java" contentType="text/html; charset=UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首页</title> </head> <body> <h1>跳转后的页面</h1> </body> </html> 温馨提示forward指令属于服务端跳转,所以我们会看到浏览器的地址还是index.jspforward指令还可以传递参数我们修改首页代码,如下<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true" isThreadSafe="true" autoFlush="true" info="我是首页" errorPage="errorPage.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首页</title> </head> <body> <form action="index.jsp" name="form1" method="post"> <input type="text" name="userName" id="UserName"> <input type="submit" value="提交"> <jsp:forward page="forward.jsp"> <jsp:param value="lisen.cc" name="website"/> </jsp:forward> </form> </body> </html>以及跳转后的页面代码<%@page language="java" contentType="text/html; charset=UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首页</title> </head> <body> <h1>跳转后的页面<%=request.getParameter("website") %></h1> </body> </html> 我们可以看到,forward传递参数的形式跟包含页面传递参数的方式是一样的,都是通过param指令。中文字符处理当获取request的参数,如果中文出现乱码时,我们可以通过一下指令进行设置<% request.setCharacterEncoding("UTF-8"); %>
2017年11月13日
1,575 阅读
3 评论
1 点赞
2017-11-13
jsp包含页面的方法
在jsp中,我们可以通过两种方式包含页面,简单点的方法是包含一个或者几个静态页面,稍微高级一点的方式是包含动态页面,甚至像动态页面传递参数,下面我们针对这两种方式分别进行介绍。包含静态页面这里所谓的静态页面其实有点不太合适,我们也可以包含jsp页面,但是无法传递参数。包含静态页面通过<%@include file="" %>指令进行的。需要包含的页面index.jsp<%@include file="include.jsp" %> 被包含的页面include.jsp<h1>Include Page</h1> <h2><%=request.getParameter("included") %></h2>我们可以看一下下面的输出页面,由于无法传递参数,所以我们在页面获取的request的参数值是null包含动态页面并传递参数继续我们刚才的代码,我们修改index.jsp代码如下<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true" isThreadSafe="true" autoFlush="true" info="我是首页" errorPage="errorPage.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>首页</title> </head> <body> <form action="index.jsp" name="form1" method="post"> <input type="text" name="userName" id="UserName"> <input type="submit" value="提交"> <% request.setCharacterEncoding("UTF-8"); String userName = request.getParameter("userName"); if(userName==null){ out.println("请输入用户名"); }else if(userName==""){ out.println("(づ ̄3 ̄)づ╭❤~,输入名称呀"); } else{ out.println(userName); } %> <%-- 注释 <%@include file="include.jsp" %> --%> <jsp:include page="include.jsp"> <jsp:param value="我被成功包含进来了" name="included"/> </jsp:include> </form> </body> </html>
2017年11月13日
1,229 阅读
0 评论
1 点赞
2017-11-11
JSP标签
JSP标签库,是使用XML语法格式完成程序操作的一种方法,其使用的语法类似于JavaBean的使用语法,于JavaBean一样,都可以通过类完成复杂的操作,而且最大的优势就是按照HTML标签的形式标签,这样可以方便的处理JSP页面的数据显示。定义空标签继承TagSupport类package me.lisen.JavaEEStudy; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class HelloTag extends TagSupport { @Override public int doStartTag() throws JspException { JspWriter jspWriter = super.pageContext.getOut(); try{ jspWriter.write("<h1>Hello,World!</h1>"); }catch (Exception e){ e.printStackTrace(); } return TagSupport.SKIP_BODY;//表示标签体为空 } }定义标签描述文件 /WEB-INF/hellotag.tld<?xml version="1.0" encoding="ISO-8859-1"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>firsttag</short-name> <uri>https://lisen.cc</uri> <!-- Invoke 'Generate' action to add tags or functions --> <tag> <name>hello</name> <tag-class>me.lisen.JavaEEStudy.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>使用标签<%@ page import="java.awt.*" %> <%@ page import="java.util.ArrayList" %><%-- Created by IntelliJ IDEA. User: lisen Date: 2017/11/10 Time: 下午12:43 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="me.lisen.JavaEEStudy.Dpt" %> <%@taglib prefix="mytag" uri="/WEB-INF/hellotag.tld" %><%--定义标签--%> <html> <head> <title>首页</title> <script src="js/jquery-3.2.1.js" type="text/javascript"></script> <script src="css/bootstrap/js/bootstrap.js" type="text/javascript"></script> <link href="css/bootstrap/css/bootstrap.css" rel="stylesheet"> <script src="js/bootstrap-fileinput/js/fileinput.js" type="text/javascript"></script> <link href="js/bootstrap-fileinput/css/fileinput.css" rel="stylesheet"> <script src="js/bootstrap-fileinput/js/locales/zh.js" type="text/javascript"></script> </head> <body> <mytag:hello/><%--使用标签--%> </body> </html>如果标签描述文件的路径比较深,我们通过修改web.xml修改映射,然后调用对应的uri获取标签描述文件的位置首先,我们修改web.xml文件,对标签描述文件进行映射<jsp-config> <taglib> <taglib-uri>hellotagtld</taglib-uri> <taglib-location>/WEB-INF/hellotag.tld</taglib-location> </taglib> </jsp-config>修改标签引用的uri<%@taglib prefix="mytag" uri="hellotagtld" %><%--定义标签--%> 定义一个有属性的标签。修改继承的类package me.lisen.JavaEEStudy; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import java.text.SimpleDateFormat; import java.util.Date; public class HelloTag extends TagSupport { private String formatStr; public void setFormatStr(String formatStr) { this.formatStr = formatStr; } public String getFormatStr() { return formatStr; } @Override public int doStartTag() throws JspException { JspWriter jspWriter = super.pageContext.getOut(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr); try{ jspWriter.write(simpleDateFormat.format(new Date())); }catch (Exception e){ e.printStackTrace(); } return TagSupport.SKIP_BODY;//表示标签体为空 } }修改tld文件,加入定义的属性<?xml version="1.0" encoding="ISO-8859-1"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>firsttag</short-name> <uri>https://lisen.cc</uri> <!-- Invoke 'Generate' action to add tags or functions --> <tag> <name>hello</name> <tag-class>me.lisen.JavaEEStudy.HelloTag</tag-class> <body-content>empty</body-content> <attribute> <name>formatStr</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>修改调用方法,传入属性<mytag:hello formatStr="yyyy-MM-dd"/><%--使用标签--%>
2017年11月11日
1,269 阅读
0 评论
1 点赞
2017-09-23
ASP.NET Core WebApi配置跨域访问
WebApi如果没有正确配置跨域访问,会提示Preflight response is not successful在asp.net core中,我们可以通过startup.cs配置跨域问题配置startup.csservices.AddCors(options=>{ options.AddPolicy("any",builder=>{ builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); });配置controller除了配置startup.cs允许跨域外,我们还需要在controller方法中增加[EnableCors("any")]属性[HttpGet] [Produces("application/json")] [EnableCors("any")] public JsonResult Get() { return Json(_service.Get()); }ajax调用配置完成后,我们就可以通过ajax调用$(function(){ $.ajax({ url:"http://localhost:5000/Product", type:"get", contentType: 'application/json', success:function(data){ var obj = data; var str=""; for(var i=0;i<obj.length;i++){ str+="<li>"+obj[i].name+"</li>"; } $("#div1").append(str); } }); });
2017年09月23日
1,301 阅读
0 评论
2 点赞
2017-09-18
ASP.NET Core读取XML文件
ASP.NET Core中,默认应用程序的配置是json文件,如果我们需要读取xml文件,是否也可以呢?答案是肯定的。其实读取xml文件的方式,跟读取json的方式基本是一样的,都可以通过Configuration读取。定义XML文件首先,我们定义个XML文件,这里我们命名为appsettings.xml,具体的内容如下:<?xml version="1.0" encoding="UTF-8" ?> <AppConfig> <WebSite> <Url des="网址">lisen.cc</Url> <Email>admin@lisen.org</Email> </WebSite> </AppConfig>修改配置文件程序如果不配置,默认读取的是appsettings.json或者appsettings.Development,我们需要修改程序,读取xml的配置文件。打开program.cs文件,修改内容如下using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Builder; namespace Study.WebUI { public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseConfiguration(new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile("appsettings.xml").Build()) .UseKestrel(options => { options.Limits.MaxConcurrentConnections = 1024; options.Limits.MaxRequestBodySize = 10 * 1024; }) .Build(); } }安装Nuget包为了读取xml文件,我们需要安装Microsoft.Extensions.Configuration.Xml使用以下代码分别演示读取xml节点的属性以及值得方法app.Use(async (context,next) => { Console.WriteLine("网址:"+Configuration["WebSite:Url:des"]);//读取属性 Console.WriteLine("邮箱:"+Configuration["WebSite:Email"]);//读取节点内容 await next.Invoke(); });温馨提示读取xml不需要最外层跟节点,否则会返回null
2017年09月18日
1,713 阅读
0 评论
2 点赞
2017-09-05
ASP.NET CORE中URL的重写和重定向
URL的重写和重定向我们还是比较经常用的,不管我们做301跳转还是防盗链亦或是进行SEO,我们都经常使用到URL的重写或者重定向。我本人也是做ERP的,所以业务系统使用的这些功能相对来说比较少,我也只是参考https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/url-rewriting?tabs=aspnetcore2x进行学习,有不足的地方大家多多指教。重定向不管是重定向还是重写,我们都需要在startup.cs中调用UseRewriter()中间件。UseRewriter()方法需要一个RewriteOptions参数,这个类位于Microsoft.AspNetCore.Rewrite命名空间。我们按照如下方式配置重定向,第一个参数是正则表达式,第二个是要跳转的位置,第三个是跳转状态,默认是302,这里我们可以改成301var options = new RewriteOptions() .AddRedirect(@"index/(\d+)", "https://lisen.cc/", 301); app.UseRewriter(options);这样配置按成后,所有方位/index/*下面的地址都讲跳转到我的博客地址。同样的,我们可以通过.AddRedirectToHttps(301,443)讲http跳转到https,第一个是状态,一般使用301永久跳转,第二个是https的端口号。也可以通过.AddRedirectToHttpsPermanent()通过301跳转到443端口重写.AddRewrite(@"^index1/(\d+)", "https://lisen.cc/", skipRemainingRules: true);方法是实现URL重写,第一个参数同样是正则表达式,第二个是要跳转的位置,第三个参数代表是否忽略其他的规则。通过读取Apache配置文件实现重写通过.AddApacheModRewrite(apacheModRewriteStreamReader);可以读取Apache的伪静态规则首先,我们需要创建一个Apache的伪静态规则的txt文件ApacheModRewrite.txt \# Rewrite path with additional sub directory RewriteRule ^/apache-mod-rules-redirect/(.*) https://lisen.cc/ [L,R=302]然后配置startup.cs,如下 using(StreamReader apacheModRewriteStreamReader=new StreamReader("ApacheModRewrite.txt")) using(StreamReader iisUrlRewriteStreamReader=new StreamReader("iisUrlRewrite.txt")) { var options = new RewriteOptions() //.AddRedirect("index1/(.*)","https://lisen.cc/",301) .AddApacheModRewrite(apacheModRewriteStreamReader); //.AddRewrite(@"^index1/(\d+)", "https://lisen.cc/", skipRemainingRules: true); app.UseRewriter(options); }IIS重写配置文件iisUrlRewrite.xml如下<rewrite> <rules> <rule name="Rewrite segment to id querystring" stopProcessing="true"> <match url="^iis-rules-rewrite/(.*)$" /> <action type="Rewrite" url="https://lisen.cc/" appendQueryString="false"/> </rule> </rules> </rewrite> using(StreamReader apacheModRewriteStreamReader=new StreamReader("ApacheModRewrite.txt")) using(StreamReader iisUrlRewriteStreamReader=new StreamReader("iisUrlRewrite.xml")) { var options = new RewriteOptions() //.AddRedirect("index1/(.*)","https://lisen.cc/",301) .AddIISUrlRewrite(iisUrlRewriteStreamReader) .Add(RewriteMapSegment; //.AddRewrite(@"^index1/(\d+)", "https://lisen.cc/", skipRemainingRules: true); app.UseRewriter(options); }
2017年09月05日
1,524 阅读
0 评论
0 点赞
2017-09-04
ASP.NET Core Razor 页面路由
在服务器端 Web 应用程序框架中,其中非常重要的设计是开发人员如何将URL与服务器上的资源进行匹配,以便正确的处理请求。最简单的方法是将 URL 映射到磁盘上的物理文件,在 Razor 页面框架中,ASP.NET团队就是这样实现的。关于 Razor 页面框架如何将 URL 与文件相匹配,有一些规则您必须了解,以及如何根据需要自定义规则改变输出的结果。如果您将 Razor 页面与 Web Form 框架进行比较,您还需要了解取代的 Url参数以及在URL中传递数据的机制。规则一,Razor 页面需要一个根目录。默认情况下,该根目录是 Pages,位于Web应用程序项目的根目录中。您可以在Startup类的ConfigureServices方法中配置其它文件夹作为根目录。以下是将根目录更改为位于应用程序 “Content” 文件夹:public void ConfigureServices(IServiceCollection services) { services .AddMvc(). AddRazorPagesOptions(options => { options.RootDirectory = "/Content"; }); }规则二,URL映射到Razor页面,URL不包含文件扩展名。规则三,“Index.cshtml”是一个默认文档,这意味着如果URL中缺少文件名,该请求将被映射到指定文件夹中的“Index.cshtml”。URL传递参数就像大多数其它框架一样,参数可以作为查询字符串在 URL 中传递,例如:www.domain.com/product?id=1;或者,您可以将其作为路由参数传递,因此上述示例将变为www.domain.com/product/1。URL的一部分必须映射到参数名称,在页面的路由模板来实现的,@page指令的一部分:@page "{id:int}"该模板告诉框架将页面名称之后URL的第一段作为“id”的路由参数。您可以通过多种方式访问路由参数的值。第一个是使用RouteData字典:@page "{id}" { var productId = RouteData.Values["id"]; }或者,您可以向该页面的OnGet()方法添加与路由参数相同名称的参数,并将其值分配给公共属性:@page "{id}" @{ @functions{ public int Id { get; set; } public void OnGet(int id) { Id = id; } } } <p>The Id is @Id</p>如果您使用的是PageModel,那么是这样实现的:using Microsoft.AspNetCore.Mvc.RazorPages; namespace RazorPages.Pages { public class ProductModel : PageModel { public int Id { get; set; } public void OnGet(int id) { Id = id; } } } @page "{id}" @model ProductModel <p>The Id is @Model.Id</p>最后,您可以在公有属性使用BindProperty特性,并省略该OnGet方法中的参数。Razor 文件内容保持不变,但是PageModel代码略有更改:using Microsoft.AspNetCore.Mvc.RazorPages; namespace RazorPages.Pages { public class ProductModel : PageModel { [BindProperty(SupportsGet = true)] public int Id { get; set; } public void OnGet() { } } }约束此外,在此示例中参数的约束是它必须有一个值。URL www.domain.com/product/apple与www.domain.com/product/21一样有效,都是可以与路由匹配。如果您希望id值为整数,则可以通过将数据类型添加到模板来指定约束:@page "{id:int}"现在,如果您尝试通过“apple”作为参数值,应用程序将返回404 Not Found状态码。您可以指定值不是必需的,可以将参数设置为可为空类型:@page "{id:int?}"如果您的应用程序允许使用“apple”作为参数值,则可以指定只允许使用A-Z和a-z的字符:@page "{id:alpha}"您可以与最小长度要求相结合:@page "{id:alpha:minlength(4)}"更多的约束信息,可以查看[url href='https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing#route-constraint-reference']微软文档[/url]
2017年09月04日
1,651 阅读
0 评论
3 点赞
2017-08-06
配置log4net写日志到数据库
前一篇我们介绍了log4net写日志到文件的方法,具体可以参考。配置log4net写日志到文件这一篇我们继续介绍log4net写日志到数据库的方法。数据库创建脚本CREATE TABLE [dbo].[Log]( [Id] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime] NOT NULL, [Thread] [varchar](255) NOT NULL, [Level] [varchar](50) NOT NULL, [Logger] [varchar](255) NOT NULL, [Message] [varchar](4000) NOT NULL, [Exception] [varchar](2000) NULL ) ON [PRIMARY]配置文件修改我们只需要修改配置文件,设置数据库类型、数据库连接信息以及sql语句即可,其他的跟写入文件的方式是相同的<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!--定义输出到数据库中--> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="1" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="server=114.115.214.130;database=lisen;UID=lisen;PWD=19900629;" /> <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> </layout> </parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> </layout> </parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> </layout> </parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> </layout> </parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="2000" /> <layout type="log4net.Layout.ExceptionLayout" /> </parameter> </appender> <root> <!--OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL--> <level value="ALL"/> <!--数据库形式记录日志--> <appender-ref ref="AdoNetAppender"/> </root> </log4net> </configuration>
2017年08月06日
1,054 阅读
0 评论
0 点赞
2017-08-06
配置log4net写日志到文件
所有的项目都离不开日志记录功能,log4net是一个功能强大的日志组件,log4net支持将日志写到文件或者写到数据库中。这篇文章,我们主要介绍简单的,将日志写入到文件中。环境安装现在做.net的基本都是使用nuget了吧,安装方法页很简单,直接在nuget包管理器中搜索log4net,然后安装即可。配置文件为了保证项目的整洁性,我们建议将log4net的配置文件,放到单独的config文件中,我们可以将log4net的配置文件,放到网站根目录的log4net.config文件中,config文件配置如下<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!--定义输出到文件中--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置--> <file value="log//"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyy-MM-dd'.txt'"/> <staticLogFileName value="false"/> <param name="MaxSizeRollBackups" value="100"/> <param name="Encoding" value="utf-8" /> <layout type="log4net.Layout.PatternLayout"> <!--<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>--> <conversionPattern value="%newline %nDate:%date %nThread:[%thread] %nLevel: %-5level %nClass: %logger [%property{NDC}] %nMessage: %message%newline" /> </layout> </appender> <root> <level value="ALL"/> <!--文件形式记录日志--> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration>使配置生效我们可以把配置文件放到AssemblyInfo.cs文件中,也可以放到其他在调用日志方法之间的任意一个类的命名空间之上。我这里放到了Gloabal.asax.cs文件中的。using System.Web; using System.Web.Mvc; using System.Web.Routing; [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)] namespace MVCDemo.WebUI { public class Global : HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); } } }使用方法使用方法非常简单,直接初始化ILog接口,然后调用方法写入日志即可log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController)); public ActionResult Index() { log.Warn("test..."); return View (); }
2017年08月06日
1,257 阅读
1 评论
0 点赞
2017-07-30
MVC实现下载以及显示图片
在MVC中我们可以很容易的通过File实现图片的显示以及下载等操作。<!DOCTYPE html> <html> <head> <title>Index</title> </head> <body> <div class="horizontal"> <div class="panel panel-heading"> 通过File下载文件 </div> <div class="panel panel-body"> <a href="@Url.Action("ImageFor",new {id="1"})">下载</a> </div> </div> <div class="panel"> <div class="panel-heading"> 通过FilePathResult显示图片 </div> <div class="panel-body"> <img src="@Url.Action("ImageFor",new{id="1"})"/> </div> </div> <div class="panel"> <div class="panel-heading"> 通过FileContentResult显示图片 </div> <div class="panel-body"> <img src="@Url.Action("ImageFor",new {id="2"})"/> </div> </div> </body> </html>using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.IO; namespace SportsStore.WebUI.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Title = "首页"; return View (); } public ActionResult ImageFor(string id){ var filePath = Server.MapPath(string.Format("/Images/image{0}.jpg", "1")); if (id == "1") { return File(filePath, "image/jpg", "meinv.jpg"); }else{ using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)){ byte[] bytes = new byte[fs.Length]; fs.Read(bytes,0,bytes.Length); var fileContentResult = new FileContentResult(bytes, "image/jpg"); return fileContentResult; } } } } }
2017年07月30日
1,039 阅读
0 评论
0 点赞
2017-07-26
WCF传递枚举值错误问题
今天对外发布一个wcf接口,因为涉及到一些数据状态,是个枚举值,所以本来打算定义一个枚举,然后客户端调用枚举进行传值,这样可以防止不必要的参数传入,但是在测试过程中,枚举传递到服务端的数据始终都是0,也就是第一个数据。代码定义当时服务端代码是这么写的[DataContract] public enum DataState { [EnumMember] Freeze = 0, [EnumMember] Active = 1 } [DataContract] public class TestClass { [DataMember] public DataState state { get; set; } }但是客户端调用WCF服务是,不管枚举值传递Freeze还是Active,服务端得到的始终都是Freeze。之前看网上有人说可以把属性里面的[DataMember]去掉,但是我客户端是需要使用这个属性的,所以如果去掉,客户端就获取不到,百度了一番度娘也没找到解决办法,大家有知道的烦请告诉一声。
2017年07月26日
1,217 阅读
0 评论
0 点赞
1
...
17
18
19