Return empty json on null in WebAPI

后端 未结 4 1070
野性不改
野性不改 2021-02-04 02:50

Is it possible to return { } instead of null when webApi returns a null object? This, to prevent my user from getting errors while parsing the response. And to make the respon

4条回答
  •  我寻月下人不归
    2021-02-04 03:50

    Maybe better solution is using Custom Message Handler.

    A delegating handler can also skip the inner handler and directly create the response.

    Custom Message Handler:

    public class NullJsonHandler : DelegatingHandler
        {
            protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
    
                var updatedResponse = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = null
                };
    
                var response = await base.SendAsync(request, cancellationToken);
    
                if (response.Content == null)
                {
                    response.Content = new StringContent("{}");
                }
    
                else if (response.Content is ObjectContent)
                {
    
                    var contents = await response.Content.ReadAsStringAsync();
    
                    if (contents.Contains("null"))
                    {
                        contents = contents.Replace("null", "{}");
                    }
    
                    updatedResponse.Content = new StringContent(contents,Encoding.UTF8,"application/json");
    
                }
    
                var tsc = new TaskCompletionSource();
                tsc.SetResult(updatedResponse);   
                return await tsc.Task;
            }
        }
    

    Register the Handler:

    In Global.asax file inside Application_Start() method register your Handler by adding below code.

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

    Now all the Asp.NET Web API Response which contains null will be replaced with empty Json body {}.

    References:
    - https://stackoverflow.com/a/22764608/2218697
    - https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers

提交回复
热议问题