public void Register(IAppHost appHost) { var contentTypes = (ContentTypes)appHost.ContentTypes; var predefinedRoutes = appHost.GetPlugin <PredefinedRoutesFeature>(); if (predefinedRoutes == null) { throw new NotSupportedException("SoapFormat requires the PredefinedRoutesFeature Plugin"); } if (!DisableSoap11) { contentTypes.Register(MimeTypes.Soap11, SoapHandler.SerializeSoap11ToStream, null); contentTypes.ContentTypeStringSerializers[MimeTypes.Soap11] = (r, o) => SoapHandler.SerializeSoap11ToBytes(r, o).FromUtf8Bytes(); var soap11 = ContentFormat.GetContentFormat(Format.Soap11); predefinedRoutes.HandlerMappings[soap11] = () => new Soap11MessageReplyHttpHandler(); } if (!DisableSoap12) { contentTypes.Register(MimeTypes.Soap12, SoapHandler.SerializeSoap12ToStream, null); contentTypes.ContentTypeStringSerializers[MimeTypes.Soap12] = (r, o) => SoapHandler.SerializeSoap12ToBytes(r, o).FromUtf8Bytes(); var soap12 = ContentFormat.GetContentFormat(Format.Soap12); predefinedRoutes.HandlerMappings[soap12] = () => new Soap12MessageReplyHttpHandler(); } }
private IHttpHandler GetHandlerForPathParts(string[] pathParts) { var pathController = pathParts[0].ToLowerInvariant(); if (pathParts.Length == 1) { if (pathController == "metadata") { return(new IndexMetadataHandler()); } return(null); } var pathAction = pathParts[1].ToLowerInvariant(); #if !NETSTANDARD2_0 if (pathAction == "wsdl") { if (pathController == "soap11") { return(new Soap11WsdlMetadataHandler()); } if (pathController == "soap12") { return(new Soap12WsdlMetadataHandler()); } } #endif if (pathAction != "metadata") { return(null); } switch (pathController) { case "json": return(new JsonMetadataHandler()); case "xml": return(new XmlMetadataHandler()); case "jsv": return(new JsvMetadataHandler()); #if !NETSTANDARD2_0 case "soap11": return(new Soap11MetadataHandler()); case "soap12": return(new Soap12MetadataHandler()); #endif case "operations": return(new CustomResponseHandler((httpReq, httpRes) => HostContext.AppHost.HasAccessToMetadata(httpReq, httpRes) ? HostContext.Metadata.GetOperationDtos() : null, "Operations")); default: string contentType; if (HostContext.ContentTypes .ContentTypeFormats.TryGetValue(pathController, out contentType)) { var format = ContentFormat.GetContentFormat(contentType); return(new CustomMetadataHandler(contentType, format)); } break; } return(null); }
public virtual IServiceStackHandler ProcessRequest(string httpMethod, string pathInfo, string filePath) { string metadata = HostContext.Config.MetadataRedirectPath.IsNullOrEmpty() ? "/metadata" : HostContext.Config.MetadataRedirectPath; if (pathInfo.TrimEnd('/').Equals(metadata, StringComparison.OrdinalIgnoreCase)) { if (pathInfo.Length == metadata.Length) { return(new IndexMetadataHandler()); } else { return new RedirectHttpHandler { RelativeUrl = metadata } }; } var pathArray = pathInfo.ToLower().Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (pathArray.Length != 2) { return(null); } switch (pathArray[0]) { case "json": return(pathArray[1] == "metadata" ? new JsonMetadataHandler() : null); case "xml": return(pathArray[1] == "metadata" ? new XmlMetadataHandler() : null); case "jsv": return(pathArray[1] == "metadata" ? new JsvMetadataHandler() : null); #if !NETSTANDARD2_0 case "soap11": return(pathArray[1] == "metadata" ? new Soap11MetadataHandler() as IServiceStackHandler : (pathArray[1] == "wsdl" ? new Soap11WsdlMetadataHandler() : null)); case "soap12": return(pathArray[1] == "metadata" ? new Soap12MetadataHandler() as IServiceStackHandler : (pathArray[1] == "wsdl" ? new Soap12WsdlMetadataHandler() : null)); #endif case "operations": return(new CustomResponseHandler((httpReq, httpRes) => HostContext.AppHost.HasAccessToMetadata(httpReq, httpRes) ? HostContext.Metadata.GetOperationDtos() : null, "Operations")); default: string contentType; if (HostContext.ContentTypes.ContentTypeFormats.TryGetValue(pathArray[0], out contentType) && pathArray[1] == "metadata") { var format = ContentFormat.GetContentFormat(contentType); return(new CustomMetadataHandler(contentType, format)); } return(null); } }
private IHttpHandler GetHandlerForPathParts(string[] pathParts) { var pathController = string.Intern(pathParts[0].ToLower()); if (pathParts.Length == 1) { if (pathController == "metadata") { return(new IndexMetadataHandler()); } return(null); } var pathAction = string.Intern(pathParts[1].ToLower()); if (pathAction == "wsdl") { if (pathController == "soap11") { return(new Soap11WsdlMetadataHandler()); } if (pathController == "soap12") { return(new Soap12WsdlMetadataHandler()); } } if (pathAction != "metadata") { return(null); } switch (pathController) { case "json": return(new JsonMetadataHandler()); case "xml": return(new XmlMetadataHandler()); case "jsv": return(new JsvMetadataHandler()); case "soap11": return(new Soap11MetadataHandler()); case "soap12": return(new Soap12MetadataHandler()); case "types": if (HostContext.Config == null || HostContext.Config.MetadataTypesConfig == null) { return(null); } if (HostContext.Config.MetadataTypesConfig.BaseUrl == null) { HostContext.Config.MetadataTypesConfig.BaseUrl = HttpHandlerFactory.GetBaseUrl(); } return(new MetadataTypesHandler { Config = HostContext.Config.MetadataTypesConfig }); case "operations": return(new CustomResponseHandler((httpReq, httpRes) => HostContext.AppHost.HasAccessToMetadata(httpReq, httpRes) ? HostContext.Metadata.GetOperationDtos() : null, "Operations")); default: string contentType; if (HostContext.ContentTypes .ContentTypeFormats.TryGetValue(pathController, out contentType)) { var format = ContentFormat.GetContentFormat(contentType); return(new CustomMetadataHandler(contentType, format)); } break; } return(null); }