@@ -7,6 +7,7 @@ namespace Carter.Response;
77using System . Net . Mime ;
88using System . Threading ;
99using System . Threading . Tasks ;
10+ using Carter . Helpers ;
1011using Microsoft . AspNetCore . Http ;
1112using Microsoft . AspNetCore . Http . Extensions ;
1213using Microsoft . Extensions . DependencyInjection ;
@@ -23,30 +24,14 @@ public static class ResponseExtensions
2324 /// <returns><see cref="Task"/></returns>
2425 public static Task Negotiate < T > ( this HttpResponse response , T model , CancellationToken cancellationToken = default )
2526 {
26- var negotiators = response . HttpContext . RequestServices . GetServices < IResponseNegotiator > ( ) . ToList ( ) ;
27- IResponseNegotiator negotiator = null ;
28-
29- MediaTypeHeaderValue . TryParseList ( response . HttpContext . Request . Headers [ "Accept" ] , out var accept ) ;
30- if ( accept != null )
31- {
32- var ordered = accept . OrderByDescending ( x => x . Quality ?? 1 ) ;
33-
34- foreach ( var acceptHeader in ordered )
35- {
36- negotiator = negotiators . FirstOrDefault ( x => x . CanHandle ( acceptHeader ) ) ;
37- if ( negotiator != null )
38- {
39- break ;
40- }
41- }
42- }
43-
44- if ( negotiator == null )
45- {
46- negotiator = negotiators . First ( x => x . CanHandle ( new MediaTypeHeaderValue ( "application/json" ) ) ) ;
47- }
48-
49- return negotiator . Handle ( response . HttpContext . Request , response , model , cancellationToken ) ;
27+ var negotiators = response . HttpContext . RequestServices
28+ . GetServices < IResponseNegotiator > ( )
29+ . Where ( n => ! NegotiationHelper . IsTestNegotiator ( n ) )
30+ . ToList ( ) ;
31+
32+ var chosenNegotiator = NegotiationHelper . SelectNegotiator ( response . HttpContext , negotiators ) ;
33+
34+ return chosenNegotiator . Handle ( response . HttpContext . Request , response , model , cancellationToken ) ;
5035 }
5136
5237 /// <summary>
@@ -58,7 +43,10 @@ public static Task Negotiate<T>(this HttpResponse response, T model, Cancellatio
5843 /// <returns><see cref="Task"/></returns>
5944 public static Task AsJson < T > ( this HttpResponse response , T model , CancellationToken cancellationToken = default )
6045 {
61- var negotiators = response . HttpContext . RequestServices . GetServices < IResponseNegotiator > ( ) ;
46+ var negotiators = response . HttpContext . RequestServices
47+ . GetServices < IResponseNegotiator > ( )
48+ . Where ( n => ! NegotiationHelper . IsTestNegotiator ( n ) )
49+ . ToList ( ) ;
6250
6351 var negotiator = negotiators . First ( x => x . CanHandle ( new MediaTypeHeaderValue ( "application/json" ) ) ) ;
6452
0 commit comments