.net mvc4 webapi开发备注



开发备注:

  1. html前端传送汉字参数,需要encodeURIComponent转码

  2. Global.asax中增加以下代码,WebApi数据以Json的形式输出

    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

  3. 解决.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>  

  4. httpProtocol放在handlers前面

  5. .Net WebApi日志组件log4Net使用

  1. 下载Log4Net组件DLL(已下载,放置在本机E:\work\工具组件\log4net下)

  2. web.config配置文件configSections节点下,增加配置

    <section name="log4net" type="log4net.Config.

    Log4NetConfigurationSectionHandler, log4net"></section>

  3. 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>

     

  4. Global.asax配置文件下增加配置

    log4net.Config.XmlConfigurator.Configure();

  5. 新增记录日志类

     public class LogHelper

        {

            private static readonly log4net.ILog logger =

    log4net.LogManager.GetLogger("LogHelper");

     

            public static void WriteLog(string msg)

            {

                logger.Info(msg);

     

    }

  6. 在代码中引用该空间,记录日志

     

  1. .Net webapi参考文档:http://www.cnblogs.com/TianFang/p/3707796.html

  2. Task可以及时返回并进行异步处理,需封装

  3. 配置管理

  1. 获取运行根目录HttpRuntime.AppDomainAppPath.ToString();

  2. 获取项目名称System.Reflection.Assembly.GetExecutingAssembly().FullName

  1. JSON处理

  1. 需要引用System.Runtime.SerializationSystem.Runtime.Serialization.Json这两个DLL

  2. 实现代码

    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);

    }

  1. 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);

            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值