1. 通过Nuget安装System.Web.Http.Tracing.

2. 通过HttpConfiguration,注册SystemDiagnosticsTraceWriter

        public static void Register(HttpConfiguration config)
{
// Web API configuration and services // Web API routes
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); config.Filters.Add(new ValidateModelStateFilter());
FluentValidationModelValidatorProvider.Configure(config); //regular registration
config.Services.Replace(typeof(ITraceWriter), new SystemDiagnosticsTraceWriter());
//through an extension method
config.EnableSystemDiagnosticsTracing();
}

3. 运行,即可看到整个运行过程的信息日志信息,通过日志信息可以窥探WebApi的运行内核信息。

发送请求:

输出信息为:

iisexpress.exe Information:  : Request, Method=POST, Url=http://localhost:52187/api/default/, Message='http://localhost:52187/api/default/'
“iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC//ROOT--): 已加载“C:\Users\lenmo\AppData\Local\Temp\Temporary ASP.NET Files\vs\89abac48\79d00737\assembly\dl3\a74c6d75\00e4889b_139bd301\System.Web.Http.resources.dll”。模块已生成,不包含符号。
iisexpress.exe Information: : Message='Default', Operation=DefaultHttpControllerSelector.SelectController
iisexpress.exe Information: : Message='WebApplication1.Controllers.DefaultController', Operation=DefaultHttpControllerActivator.Create
iisexpress.exe Information: : Message='WebApplication1.Controllers.DefaultController', Operation=HttpControllerDescriptor.CreateController
iisexpress.exe Information: : Message='所选操作“Post(UserModel user)”', Operation=ApiControllerActionSelector.SelectAction
“iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC//ROOT--): 已加载“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
iisexpress.exe Information: : Message='读取的值=“WebApplication1.Controllers.UserModel”', Operation=JsonMediaTypeFormatter.ReadFromStreamAsync
iisexpress.exe Information: : Message='参数“user”已绑定到值“WebApplication1.Controllers.UserModel”', Operation=FormatterParameterBinding.ExecuteBindingAsync
iisexpress.exe Information: : Message='模型状态无效。user.Password: Please specify a first name', Operation=HttpActionBinding.ExecuteBindingAsync
iisexpress.exe Information: : Message='将使用同一“JsonMediaTypeFormatter”格式化程序', Operation=JsonMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe Information: : Message='所选格式化程序=“JsonMediaTypeFormatter”,content-type=“application/json; charset=utf-8”', Operation=DefaultContentNegotiator.Negotiate
iisexpress.exe Information: : Operation=ValidateModelStateFilter.OnActionExecutingAsync, Status= (BadRequest)
iisexpress.exe Information: : Operation=DefaultController.ExecuteAsync, Status= (BadRequest)
iisexpress.exe Information: : Response, Status= (BadRequest), Method=POST, Url=http://localhost:52187/api/default/, Message='Content-type=“application/json; charset=utf-8”,content-length=未知'
iisexpress.exe Information: : Operation=JsonMediaTypeFormatter.WriteToStreamAsync
iisexpress.exe Information: : Operation=DefaultController.Dispose

注意: 通过示例注册代码,默认将打印所有的运行日志,如果希望对日志进行筛选,可以通过以下方式:

            //regular registration
config.Services.Replace(typeof(ITraceWriter), new SystemDiagnosticsTraceWriter() { MinimumLevel= TraceLevel.Error});
//through an extension method
config.EnableSystemDiagnosticsTracing();

默认的注册方式为: Info,即打印所有信息出来。TraceLevel的定义为:

  //
// 摘要:
// 指定跟踪级别的枚举。
public enum TraceLevel
{
//
// 摘要:
// 已禁用跟踪。
Off = ,
//
// 摘要:
// 调试跟踪的跟踪级别。
Debug = ,
//
// 摘要:
// 信息跟踪的跟踪级别。
Info = ,
//
// 摘要:
// 警告跟踪的跟踪级别。
Warn = ,
//
// 摘要:
// 错误跟踪的跟踪级别。
Error = ,
//
// 摘要:
// 严重跟踪的跟踪级别。
Fatal =
}

也可以使用第三方的日志组件用于输出运行时信息:如

WebApiContrib.Tracing.Log4Net
WebApiContrib.Tracing.Nlog

安装方法,Nuget:

install-package WebApiContrib.Tracing.Nlog
install-package WebApiContrib.Tracing.Log4Net

注册代码类似:

httpConfiguration.Services.Replace(typeof(ITraceWriter), new NlogTraceWriter());

通过日志查看Web Api详细运行过程的更多相关文章

  1. ASP.NET Web API 控制器创建过程(一)

    ASP.NET Web API 控制器创建过程(一) 前言 在前面对管道.路由有了基础的了解过后,本篇将带大家一起学习一下在ASP.NET Web API中控制器的创建过程,这过程分为几个部分下面的内 ...

  2. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  3. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

  4. IDEA整合日志框架Log4j2+Slf4j详细配置过程

    日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是slf4j是一系列的日志接口,而log4j2.logback是具体实现了接口功能的日志框架.现在的主流日志接口都使用slf4j,而日志的实现就见仁 ...

  5. ASP.NET Web API 控制器执行过程

    http://www.cnblogs.com/jin-yuan/p/3952605.html

  6. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

    作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...

  7. devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务

    使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...

  8. 关于操作 ASP.NET Web API的实例

    WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...

  9. HttpClient + ASP.NET Web API, WCF之外的另一个选择

    WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...

随机推荐

  1. git submodule临时分支;以及git reset使用

    submodule 已经建立好了一个gitlab submodule形式的repo: 在repo A下面有一个submodule B, A --> B. clone -b branch [rep ...

  2. django使用bootstrap快速美化 admin后台

    使用django-admin-bootstrappe快速美化后台 两步: 1.pip install django-admin-bootstrapped  安装应用 2.在setting.py里面添加 ...

  3. DCOS(centos 7.4/7.6)

    https://dcos.io/releases/ https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh https ...

  4. windowplayer播放列表属性

    ArrayList a = new ArrayList(); a.Add("c:\\kugou\\林宇中 - 干物女.mp3"); a.Add("c:\\kugou\\海 ...

  5. 前端 crypto-js aes 加解密

    下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...

  6. 006PHP文件处理—— 目录操作 删除目录 删除置顶类型文件

    <?php /** * 目录操作 删除目录 删除置顶类型文件 */ //echo rmdir('61') or die('目录删除失败'); //删除一个目录中有其他文件的内容的方法: //第1 ...

  7. Python3 循环语句(十)

    Python中的循环语句有 for 和 while. Python循环语句的控制结构图如下所示: while 循环 Python中while语句的一般形式: while 判断条件: 语句 同样需要注意 ...

  8. [转载]java中的标号:outer的作用

    转载自:http://blog.sina.com.cn/s/blog_6f8bd746010136yr.html 标号label 标号提供了一种简单的break语句所不能实现的控制循环的方法,当在循环 ...

  9. 使用file_get_contents提交http post

    以前使用curl获取需要登陆内容的文章,但其实,自5.0开始,使用file_get_contents就可以完成.(前提是开启了allow_url_fopen),下面以一个简单的例子说明一下:1.先看一 ...

  10. 用 Unity 和 HTC Vive 实现高级 VR 机制(1)

    原文:Advanced VR Mechanics With Unity and the HTC Vive Part 1 作者:Eric Van de Kerckhove 译者:kmyhy VR 从来没 ...