簡體   English   中英

在從 web.api 返回之前攔截 Json

[英]Intercept Json before returning from web.api

我希望從我的 web.api 攔截返回模型,並通過翻譯服務運行返回數據,即谷歌或 Azure 用於英語以外的語言。 有沒有辦法添加一個屬性或額外的配置來攔截模型,執行翻譯,然后返回給控制器?

試試這個代碼也添加這個代碼

//添加這一行 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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM