Exemple #1
0
        /// <summary>
        /// Reads the JSON HTTP request entity body.
        /// </summary>
        /// <param name="context">The <see cref="ResourceExecutingContext"/>.</param>
        /// <returns>
        /// A <see cref="Task"/> that on completion provides a <see cref="JObject"/> containing the HTTP request entity
        /// body.
        /// </returns>
        protected virtual async Task <JObject> ReadAsJsonAsync(ResourceExecutingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var request = context.HttpContext.Request;

            if (request.Body == null ||
                !request.ContentLength.HasValue ||
                request.ContentLength.Value == 0L ||
                !HttpMethods.IsPost(request.Method) ||
                !WebHookHttpRequestUtilities.IsJson(request))
            {
                // Other filters will log and return errors about these conditions.
                return(null);
            }

            var modelState    = context.ModelState;
            var actionContext = new ActionContext(
                context.HttpContext,
                context.RouteData,
                context.ActionDescriptor,
                modelState);

            var valueProviderFactories = context.ValueProviderFactories;
            var valueProvider          = await CompositeValueProvider.CreateAsync(actionContext, valueProviderFactories);

            var bindingContext = DefaultModelBindingContext.CreateBindingContext(
                actionContext,
                valueProvider,
                _jObjectMetadata,
                bindingInfo: null,
                modelName: ModelStateRootKey);

            // Read request body.
            await _bodyModelBinder.BindModelAsync(bindingContext);

            if (!bindingContext.ModelState.IsValid)
            {
                return(null);
            }

            if (!bindingContext.Result.IsModelSet)
            {
                throw new InvalidOperationException(Resources.VerifyNotification_ModelBindingFailed);
            }

            // Success
            return((JObject)bindingContext.Result.Model);
        }
Exemple #2
0
        /// <inheritdoc />
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            var request = context.HttpContext.Request;

            switch (_requestMetadata.BodyType)
            {
            case WebHookBodyType.Form:
                if (!request.HasFormContentType)
                {
                    context.Result = CreateUnsupportedMediaTypeResult(Resources.VerifyBody_NoFormData);
                }
                break;

            case WebHookBodyType.Json:
                if (!WebHookHttpRequestUtilities.IsJson(request))
                {
                    context.Result = CreateUnsupportedMediaTypeResult(Resources.VerifyBody_NoJson);
                }
                break;

            case WebHookBodyType.Xml:
                if (!WebHookHttpRequestUtilities.IsXml(request))
                {
                    context.Result = CreateUnsupportedMediaTypeResult(Resources.VerifyBody_NoXml);
                }
                break;

            default:
                var message = string.Format(
                    CultureInfo.CurrentCulture,
                    Resources.General_InvalidEnumValue,
                    nameof(WebHookBodyType),
                    _requestMetadata.BodyType);
                throw new InvalidOperationException(message);
            }
        }