开发备注:
-
html前端传送汉字参数,需要encodeURIComponent转码
-
Global.asax中增加以下代码,将WebApi数据以Json的形式输出
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
-
解决.net WebApi跨域访问,在Web.config文件中system.webServer节点下添加跨域配置信息
<!--解决.Net WebAPi跨域访问的问题 add by zh 20171025-->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
-
httpProtocol放在handlers前面
-
.Net WebApi日志组件log4Net使用
-
下载Log4Net组件DLL(已下载,放置在本机E:\work\工具组件\log4net下)
-
在web.config配置文件configSections节点下,增加配置
<section name="log4net" type="log4net.Config.
Log4NetConfigurationSectionHandler, log4net"></section>
-
在web.config配置文件configuration节点下增加配置
<log4net>
<!--存调试信息日志-->
<appender name="DebugFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Debug/debug.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size" /><!--按照大小来记录日志-->
<maxSizeRollBackups value="10" /><!--备份log文件的个数最多10个-->
<maximumFileSize value="2MB" /><!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--多线程配置-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="【%d{yyy-MM-dd HH:mm:ss}】%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="DEBUG" />
<levelMax value="DEBUG" />
</filter>
</appender>
<!--存提示日志-->
<appender name="InfoFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Info/info.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size" /><!--按照大小来记录日志-->
<maxSizeRollBackups value="10" /><!--备份log文件的个数最多10个-->
<maximumFileSize value="2MB" /><!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--多线程配置-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="【%d{yyy-MM-dd HH:mm:ss}】%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
</appender>
<!--存告警日志-->
<appender name="WarnFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Warn/warn.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size" /><!--按照大小来记录日志-->
<maxSizeRollBackups value="10" /><!--备份log文件的个数最多10个-->
<maximumFileSize value="2MB" /><!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--多线程配置-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="【%d{yyy-MM-dd HH:mm:ss}】%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="WARN" />
</filter>
</appender>
<!--存错误日志-->
<appender name="ErrorFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Error/error.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size" /><!--按照大小来记录日志-->
<maxSizeRollBackups value="10" /><!--备份log文件的个数最多10个-->
<maximumFileSize value="2MB" /><!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--多线程配置-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="【%d{yyy-MM-dd HH:mm:ss}】%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR" />
</filter>
</appender>
<!--存致命错误日志-->
<appender name="FatalFile" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/Fatal/fatal.txt"/>
<param name="AppendToFile" value="true"/>
<rollingStyle value="Size" /><!--按照大小来记录日志-->
<maxSizeRollBackups value="10" /><!--备份log文件的个数最多10个-->
<maximumFileSize value="2MB" /><!--每个log文件最大是2M,如果超过2M将重新创建一个新的log文件,并将原来的log文件备份。-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--多线程配置-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="【%d{yyy-MM-dd HH:mm:ss}】%m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="FATAL" />
<levelMax value="FATAL" />
</filter>
</appender>
<root>
<appender-ref ref="DebugFile" />
<appender-ref ref="InfoFile" />
<appender-ref ref="WarnFile" />
<appender-ref ref="ErrorFile" />
<appender-ref ref="FatalFile" />
</root>
}
</log4net>
-
在Global.asax配置文件下增加配置
log4net.Config.XmlConfigurator.Configure();
-
新增记录日志类
public class LogHelper
{
private static readonly log4net.ILog logger =
log4net.LogManager.GetLogger("LogHelper");
public static void WriteLog(string msg)
{
logger.Info(msg);
}
-
在代码中引用该空间,记录日志
-
.Net webapi参考文档:http://www.cnblogs.com/TianFang/p/3707796.html
-
Task可以及时返回并进行异步处理,需封装
-
配置管理
-
获取运行根目录HttpRuntime.AppDomainAppPath.ToString();
-
获取项目名称System.Reflection.Assembly.GetExecutingAssembly().FullName
-
JSON处理
-
需要引用System.Runtime.Serialization、System.Runtime.Serialization.Json这两个DLL
-
实现代码
public static string ObjectToJson(object obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, obj);
byte[] dataBytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(dataBytes, 0, (int)stream.Length);
return Encoding.UTF8.GetString(dataBytes);
}
// 从一个Json串生成对象信息
public static object JsonToObject(string jsonString,object obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
return serializer.ReadObject(mStream);
}
-
WebApi开启Session,所以需要修改配置,手动在 Global 开启 session 支持
1.重写 init() 方法
2.开启session支持public override void Init()
{
this.AuthenticateRequest += WebApiApplication_AuthenticateRequest;
base.Init();
}
//开启session支持
void WebApiApplication_AuthenticateRequest(object sender,EventArgs e)
{
//启用 webapi 支持session 会话
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}