Beispiel #1
0
        protected virtual void ProcessOperations(HtmlTextWriter writer, IHttpRequest httpReq)
        {
            EndpointHost.Config.AssertFeatures(Feature.Metadata);

            if (EndpointHost.Config.MetadataVisibility != EndpointAttributes.All)
            {
                var actualAttributes = EndpointHandlerBase.GetEndpointAttributesFromRequest(httpReq);
                if ((actualAttributes & EndpointHost.Config.MetadataVisibility) != EndpointHost.Config.MetadataVisibility)
                {
                    throw new UnauthorizedAccessException("Access to metadata is unauthorized.");
                }
            }

            var operations    = EndpointHost.ServiceOperations;
            var operationName = httpReq.QueryString["op"];

            if (operationName != null)
            {
                var    allTypes        = operations.AllOperations.Types;
                var    operationType   = allTypes.Single(x => x.Name == operationName);
                var    requestMessage  = CreateMessage(operationType);
                var    restPaths       = CreateRestPaths(operationType);
                string responseMessage = null;

                Type operationResponseType = null;
                if (!operations.OperationResponseTypesMap.TryGetValue(operationType, out operationResponseType))
                {
                    if (allTypes.Any(x => x.Name == operationName + ResponseSuffix))
                    {
                        operationResponseType = allTypes.Single(x => x.Name == operationName + ResponseSuffix);
                    }
                }
                if (operationResponseType != null)
                {
                    responseMessage = CreateMessage(operationResponseType);
                }

                var description = GetDescriptionFromOperationType(operationType);
                if (!description.IsNullOrEmpty())
                {
                    description = "<div id='desc'>"
                                  + "<p>" + description
                                  .Replace("<", "&lt;")
                                  .Replace(">", "&gt;")
                                  .Replace("\n", "<br />\n")
                                  + "</p>"
                                  + "</div>";
                }


                RenderOperation(writer, httpReq, operationName, requestMessage, responseMessage, restPaths, description);
                return;
            }

            RenderOperations(writer, httpReq, operations.AllOperations);
        }