如何通过web.config

时间:2017-03-14 22:05:23

标签: c# asp.net asp.net-web-api asp.net-web-api2

为了记录每个WebApi请求/响应的JSON,我创建了一个自定义DelegatingHandler并将其添加到MessageHandlers中的WebApiConfig.cs集合中,并且效果很好。

将来,我希望能够通过web.config在其他WebApi应用程序上启用此处理程序,而无需实际修改WebApiConfig.cs

作为澄清,我想要实现的是类似于WCF中可能的内容,您可以创建一个完全独立的dll,将其放入WCF服务的bin文件夹中,并将其添加到WCF管道中通过编辑web.config文件而不必修改服务的来源。

这是否可以在WebApi中使用,或者只能在运行时通过代码添加自定义DelegatingHandler

3 个答案:

答案 0 :(得分:0)

经过一番研究后,我正在回答我自己的问题。如果不必修改目标应用程序的源代码,这似乎是不可能的。如果在编写应用程序期间给出了一些想法并且知道要查找它,则可以在启动时动态加载或注入这样的处理程序。另一种可能的解决方案是将日志记录处理程序创建为nuget包,当nuget包安装到目标应用程序中时,安装程​​序将添加dll并创建一个WebActivator挂钩,将处理程序添加到{{1 MessagingHandlers中的集合。这可能是涉及最少量手动代码更改的方法,但仍需要重新编译和重新部署目标应用程序。

答案 1 :(得分:0)

修改处理程序以检查配置并在启用时执行其功能,否则只需让请求通过。如果用于记录,请确保在管道的早期添加。如果可能,请考虑使用中间件。

public class LoggingHandler : DelegatingHandler {
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
        var appSetting = ConfigurationManager.AppSettings["LoggingHandlerEnabled"];
        var enabled = true;
        bool.TryParse(appSetting, out enabled);

        if(enabled) {
            //...Extract and log request
            LogRequest(request);
        }

        // Execute the request and get the response
        var response = await base.SendAsync(request, cancellationToken);

        if(enabled) {
            //...Extract details from response for logging
            LogResponse(response);
        }

        return response;
    }

    private void LogRequest(HttpRequestMessage request) {
        //... code removed for brevity
    }

    private void LogResponse(HttpResponseMessage response) {
        //... code removed for brevity
    }
}

有了这个,那么就没有必要再修改任何代码来启用/禁用处理程序了。更新配置文件,处理程序将遵循设置。

答案 2 :(得分:-1)

在ASP.NET Web API 2中进行跟踪

从Tools菜单中,选择Library Package Manager,然后选择Package Manage Console。

在“程序包管理器控制台”窗口中,键入以下命令。

Install-Package Microsoft.AspNet.WebApi.Tracing
Update-Package Microsoft.AspNet.WebApi.WebHost

第一个命令安装最新的Web API跟踪包。它还会更新核心Web API包。第二个命令将WebApi.WebHost包更新为最新版本。

打开App_Start文件夹中的文件WebApiConfig.cs。将以下代码添加到Register方法。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // New code
        config.EnableSystemDiagnosticsTracing();

        // Other configuration code not shown.
    }
}

此代码将SystemDiagnosticsTraceWriter类添加到Web API管道。 SystemDiagnosticsTraceWriter类将跟踪写入System.Diagnostics.Trace

要查看跟踪,请在调试器中运行该应用程序。在浏览器中,导航至/api/values

trace语句将写入Visual Studio中的“输出”窗口。 (从“视图”菜单中选择“输出”。

enter image description here