public void BeforeSendReply(ref Message reply, object correlationState)
        {
            WebBodyFormatMessageProperty property;
            JavascriptCallbackResponseMessageProperty property2 = null;

            if ((reply.Properties.TryGetValue <WebBodyFormatMessageProperty>("WebBodyFormatMessageProperty", out property) && (property != null)) && (property.Format == WebContentFormat.Json))
            {
                HttpResponseMessageProperty property3;
                if (!reply.Properties.TryGetValue <JavascriptCallbackResponseMessageProperty>(JavascriptCallbackResponseMessageProperty.Name, out property2) || (property2 == null))
                {
                    property2 = JavascriptCallbackMessageInspectorExUtilities.TrySetupJavascriptCallback(this.CallbackParameterName);
                    if (property2 != null)
                    {
                        reply.Properties.Add(JavascriptCallbackResponseMessageProperty.Name, property2);
                    }
                }
                if (((property2 != null) && reply.Properties.TryGetValue <HttpResponseMessageProperty>(HttpResponseMessageProperty.Name, out property3)) && (property3 != null))
                {
                    property3.Headers[HttpResponseHeader.ContentType] = applicationJavaScriptMediaType;
                    if (!property2.StatusCode.HasValue)
                    {
                        property2.StatusCode = new HttpStatusCode?(property3.StatusCode);
                    }
                    property3.StatusCode = HttpStatusCode.OK;
                    if (property3.SuppressEntityBody)
                    {
                        property3.SuppressEntityBody = false;
                        Message message = WebOperationContext.Current.CreateJsonResponse <object>(null);
                        message.Properties.CopyProperties(reply.Properties);
                        reply = message;
                    }
                }
            }
        }
コード例 #2
0
        public void BeforeSendReply(ref Message reply, object correlationState)
        {
            WebBodyFormatMessageProperty formatProperty;
            JavascriptCallbackResponseMessageProperty javascriptCallbackResponseMessageProperty = null;

            if (reply.Properties.TryGetValue <WebBodyFormatMessageProperty>(WebBodyFormatMessageProperty.Name, out formatProperty) &&
                formatProperty != null &&
                formatProperty.Format == WebContentFormat.Json)
            {
                if (!reply.Properties.TryGetValue <JavascriptCallbackResponseMessageProperty>(JavascriptCallbackResponseMessageProperty.Name, out javascriptCallbackResponseMessageProperty) ||
                    javascriptCallbackResponseMessageProperty == null)
                {
                    javascriptCallbackResponseMessageProperty = WebHttpBehavior.TrySetupJavascriptCallback(this.CallbackParameterName);
                    if (javascriptCallbackResponseMessageProperty != null)
                    {
                        reply.Properties.Add(JavascriptCallbackResponseMessageProperty.Name, javascriptCallbackResponseMessageProperty);
                    }
                }
                if (javascriptCallbackResponseMessageProperty != null)
                {
                    HttpResponseMessageProperty property;
                    if (reply.Properties.TryGetValue <HttpResponseMessageProperty>(HttpResponseMessageProperty.Name, out property) &&
                        property != null)
                    {
                        property.Headers[HttpResponseHeader.ContentType] = applicationJavaScriptMediaType;
                        if (javascriptCallbackResponseMessageProperty.StatusCode == null)
                        {
                            javascriptCallbackResponseMessageProperty.StatusCode = property.StatusCode;
                        }
                        property.StatusCode = HttpStatusCode.OK;

                        if (property.SuppressEntityBody)
                        {
                            property.SuppressEntityBody = false;
                            Message nullJsonMessage = WebOperationContext.Current.CreateJsonResponse <object>(null);
                            nullJsonMessage.Properties.CopyProperties(reply.Properties);
                            reply = nullJsonMessage;
                        }
                    }
                }
            }
        }
        internal static JavascriptCallbackResponseMessageProperty TrySetupJavascriptCallback(string callbackParameterName)
        {
            JavascriptCallbackResponseMessageProperty property = null;

            if (!string.IsNullOrEmpty(callbackParameterName) && !OperationContext.Current.OutgoingMessageProperties.TryGetValue <JavascriptCallbackResponseMessageProperty>(JavascriptCallbackResponseMessageProperty.Name, out property))
            {
                UriTemplateMatch uriTemplateMatch = WebOperationContext.Current.IncomingRequest.UriTemplateMatch;
                if ((uriTemplateMatch != null) && uriTemplateMatch.QueryParameters.AllKeys.Contains <string>(callbackParameterName))
                {
                    string str = uriTemplateMatch.QueryParameters[callbackParameterName];
                    if (!string.IsNullOrEmpty(str))
                    {
                        JavascriptCallbackResponseMessageProperty property2 = new JavascriptCallbackResponseMessageProperty();
                        property2.CallbackFunctionName = str;
                        property = property2;
                        OperationContext.Current.OutgoingMessageProperties.Add(JavascriptCallbackResponseMessageProperty.Name, property);
                    }
                }
            }
            return(property);
        }