从 web.api 返回之前拦截 JSON

问题描述 投票:0回答:1

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

c# rest asp.net-web-api2
1个回答
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;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.