从web.api返回之前拦截Json

时间:2019-08-23 01:38:16

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

我希望从web.api中拦截返回的模型,并通过翻译服务(即Google或Azure)针对英语以外的语言运行返回的数据。有没有添加属性或其他配置的方法来拦截模型,执行转换然后返回到控制器?

1 个答案:

答案 0 :(得分:0)

尝试此代码也添加此代码

///添加此行global.asax文件

GlobalConfiguration.Configuration.MessageHandlers.Add(new CustomLogHandler());

public class CustomLogHandler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var logMetadata = await BuildRequestMetadata(request);
        var response = await base.SendAsync(request, cancellationToken);
        logMetadata = await BuildResponseMetadata(logMetadata, response);
        await SendToLog(logMetadata);
        return response;
    }
    private async Task<LogMetadata> BuildRequestMetadata(HttpRequestMessage request)
    {
        LogMetadata log = new LogMetadata
        {
            RequestMethod = request.Method.Method,
            RequestTimestamp = DateTime.Now,
            RequestUri = request.RequestUri.ToString(),
            RequestContent = await request.Content.ReadAsStringAsync(),
        };
        return log;
    }
    private async Task<LogMetadata> BuildResponseMetadata(LogMetadata logMetadata, HttpResponseMessage response)
    {
        logMetadata.ResponseStatusCode = response.StatusCode;
        logMetadata.ResponseTimestamp = DateTime.Now;
        logMetadata.ResponseContentType = response.Content == null ? string.Empty : response.Content.Headers.ContentType.MediaType;
        logMetadata.Response = await response.Content.ReadAsStringAsync();
        return logMetadata;
    }
    private async Task<bool> SendToLog(LogMetadata logMetadata)
    {
        try
        {
         //write this code
        }
        catch
        {
            return false;
        }
        return true;
    }

}
相关问题