System.ServiceModel.Description.WebHttpBehavior.ValidateOperation C# (CSharp) Метод

ValidateOperation() защищенный Метод

protected ValidateOperation ( OperationDescription operation ) : void
operation OperationDescription
Результат void
		protected void ValidateOperation (OperationDescription operation)
		{
			var wai = operation.GetWebAttributeInfo ();
			if (wai.Method == "GET")
				return;
			var style = GetBodyStyle (wai);

			// if the style is wrapped there won't be problems
			if (style == WebMessageBodyStyle.Wrapped)
				return;

			string [] parameters;
			if (wai.UriTemplate != null) {
				// find all variables in the URI
				var uri = new UriTemplate (wai.UriTemplate);
				parameters = new string [uri.PathSegmentVariableNames.Count + uri.QueryValueVariableNames.Count];
				uri.PathSegmentVariableNames.CopyTo (parameters, 0);
				uri.QueryValueVariableNames.CopyTo (parameters, uri.PathSegmentVariableNames.Count);

				// sort because Array.BinarySearch is the easiest way for case-insensitive search
				Array.Sort (parameters, StringComparer.InvariantCultureIgnoreCase);
			} else
				parameters = new string [0];

			bool hasBody = false;

			foreach (var msg in operation.Messages) {
				if (msg.Direction == MessageDirection.Input) {
					// the message is for a request
					// if requests are wrapped there is nothing to check
					if (style == WebMessageBodyStyle.WrappedRequest)
						continue;

					foreach (var part in msg.Body.Parts) {
						if (Array.BinarySearch (parameters, part.Name, StringComparer.InvariantCultureIgnoreCase) < 0) {
							// this part of the message is not covered by a variable in the URI
							// so it must be passed in the body
							if (hasBody)
								throw new InvalidOperationException (String.Format ("Operation '{0}' has multiple message body parts. Add parameters to the UriTemplate or change the BodyStyle to 'Wrapped' or 'WrappedRequest' on the WebInvoke/WebGet attribute.", operation.Name));
							hasBody = true;
						}
					}
				} else {
					// the message is for a response
					if (style != WebMessageBodyStyle.WrappedResponse && msg.Body.Parts.Count > 0)
						throw new InvalidOperationException (String.Format ("Operation '{0}' has output parameters. BodyStyle must be 'Wrapped' or 'WrappedResponse' on the operation WebInvoke/WebGet attribute.", operation.Name));
				}
			}
		}