/// <summary> /// Specifies the <paramref name="statusCode"/> and <paramref name="value"/> to respond with for a request. /// </summary> /// <param name="responds"></param> /// <param name="statusCode">The status code response for given request.</param> /// <param name="value">The response value.</param> /// <param name="formatter">The media type formatter</param> /// <param name="mediaType">The media type. Can be null, in which case the <paramref name="formatter"/> default content type will be used.</param> public static TResult RespondObject <T, TResult>(this IResponds <TResult> responds, HttpStatusCode statusCode, Func <HttpRequestMessage, T> value, MediaTypeFormatter formatter, MediaTypeHeaderValue mediaType) where TResult : IResponseResult { if (responds is null) { throw new ArgumentNullException(nameof(responds)); } return(responds.RespondUsing(new MediaTypeFormatterObjectResponseStrategy <T>(statusCode, value, mediaType, formatter))); }
/// <summary> /// Specifies to throw a <see cref="TaskCanceledException"/> after a specified amount of time, simulating a HTTP request timeout. /// </summary> /// <param name="responds"></param> /// <param name="timeoutAfter">The time after which the timeout occurs.</param> public static TResult TimesOutAfter <TResult>(this IResponds <TResult> responds, TimeSpan timeoutAfter) where TResult : IResponseResult { if (responds is null) { throw new ArgumentNullException(nameof(responds)); } return(responds.RespondUsing(new TimeoutStrategy(timeoutAfter))); }
/// <summary> /// Specifies a strategy that returns the response for a request. /// </summary> /// <param name="responds"></param> internal static TResult RespondUsing <TStrategy, TResult>(this IResponds <TResult> responds) where TStrategy : IResponseStrategy, new() where TResult : IResponseResult { if (responds is null) { throw new ArgumentNullException(nameof(responds)); } return(responds.RespondUsing(new TStrategy())); }
/// <summary> /// Specifies the <paramref name="statusCode"/> and <paramref name="content"/> to respond with for a request. /// </summary> /// <param name="responds"></param> /// <param name="statusCode">The status code response for given request.</param> /// <param name="content">The response content.</param> /// <param name="mediaType">The media type. Can be null, in which case the default JSON content type will be used.</param> /// <param name="serializerSettings">The serializer settings.</param> public static TResult RespondJson <T, TResult>(this IResponds <TResult> responds, HttpStatusCode statusCode, Func <HttpRequestMessage, T> content, MediaTypeHeaderValue mediaType, JsonSerializerSettings serializerSettings) where TResult : IResponseResult { if (responds is null) { throw new ArgumentNullException(nameof(responds)); } MediaTypeHeaderValue mt = mediaType ?? MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); return(responds.RespondUsing(new JsonResponseStrategy <T>(statusCode, content, mt, serializerSettings))); }
/// <summary> /// Specifies the <paramref name="statusCode"/> and <paramref name="streamContent"/> to respond with for a request. /// </summary> /// <param name="responds"></param> /// <param name="statusCode">The status code response for given request.</param> /// <param name="streamContent">The factory to create the response stream with.</param> /// <param name="mediaType">The media type.</param> public static TResult Respond <TResult>(this IResponds <TResult> responds, HttpStatusCode statusCode, Func <Stream> streamContent, MediaTypeHeaderValue mediaType) where TResult : IResponseResult { if (responds is null) { throw new ArgumentNullException(nameof(responds)); } if (streamContent is null) { throw new ArgumentNullException(nameof(streamContent)); } return(responds.RespondUsing(new FromStreamStrategy(statusCode, streamContent, mediaType))); }