| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | #pragma warning disable CS1591using System;namespace MediaBrowser.Model.Services{    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]    public class RouteAttribute : Attribute    {        /// <summary>        ///     <para>Initializes an instance of the <see cref="RouteAttribute"/> class.</para>        /// </summary>        /// <param name="path">        ///     <para>The path template to map to the request.  See        ///        <see cref="Path">RouteAttribute.Path</see>        ///        for details on the correct format.</para>        /// </param>        public RouteAttribute(string path)            : this(path, null)        {        }        /// <summary>        ///     <para>Initializes an instance of the <see cref="RouteAttribute"/> class.</para>        /// </summary>        /// <param name="path">        ///     <para>The path template to map to the request.  See        ///         <see cref="Path">RouteAttribute.Path</see>        ///         for details on the correct format.</para>        /// </param>        /// <param name="verbs">A comma-delimited list of HTTP verbs supported by the        ///     service.  If unspecified, all verbs are assumed to be supported.</param>        public RouteAttribute(string path, string verbs)        {            Path = path;            Verbs = verbs;        }        /// <summary>        ///     Gets or sets the path template to be mapped to the request.        /// </summary>        /// <value>        ///     A <see cref="String"/> value providing the path mapped to        ///     the request.  Never <see langword="null"/>.        /// </value>        /// <remarks>        ///     <para>Some examples of valid paths are:</para>        ///        ///     <list>        ///         <item>"/Inventory"</item>        ///         <item>"/Inventory/{Category}/{ItemId}"</item>        ///         <item>"/Inventory/{ItemPath*}"</item>        ///     </list>        ///        ///     <para>Variables are specified within "{}"        ///     brackets.  Each variable in the path is mapped to the same-named property        ///     on the request DTO.  At runtime, ServiceStack will parse the        ///     request URL, extract the variable values, instantiate the request DTO,        ///     and assign the variable values into the corresponding request properties,        ///     prior to passing the request DTO to the service object for processing.</para>        ///        ///     <para>It is not necessary to specify all request properties as        ///     variables in the path.  For unspecified properties, callers may provide        ///     values in the query string.  For example: the URL        ///     "http://services/Inventory?Category=Books&ItemId=12345" causes the same        ///     request DTO to be processed as "http://services/Inventory/Books/12345",        ///     provided that the paths "/Inventory" (which supports the first URL) and        ///     "/Inventory/{Category}/{ItemId}" (which supports the second URL)        ///     are both mapped to the request DTO.</para>        ///        ///     <para>Please note that while it is possible to specify property values        ///     in the query string, it is generally considered to be less RESTful and        ///     less desirable than to specify them as variables in the path.  Using the        ///     query string to specify property values may also interfere with HTTP        ///     caching.</para>        ///        ///     <para>The final variable in the path may contain a "*" suffix        ///     to grab all remaining segments in the path portion of the request URL and assign        ///     them to a single property on the request DTO.        ///     For example, if the path "/Inventory/{ItemPath*}" is mapped to the request DTO,        ///     then the request URL "http://services/Inventory/Books/12345" will result        ///     in a request DTO whose ItemPath property contains "Books/12345".        ///     You may only specify one such variable in the path, and it must be positioned at        ///     the end of the path.</para>        /// </remarks>        public string Path { get; set; }        /// <summary>        ///    Gets or sets short summary of what the route does.        /// </summary>        public string Summary { get; set; }        public string Description { get; set; }        public bool IsHidden { get; set; }        /// <summary>        ///    Gets or sets longer text to explain the behaviour of the route.        /// </summary>        public string Notes { get; set; }        /// <summary>        ///     Gets or sets a comma-delimited list of HTTP verbs supported by the service, such as        ///     "GET,PUT,POST,DELETE".        /// </summary>        /// <value>        ///     A <see cref="String"/> providing a comma-delimited list of HTTP verbs supported        ///     by the service, <see langword="null"/> or empty if all verbs are supported.        /// </value>        public string Verbs { get; set; }        /// <summary>        /// Used to rank the precedences of route definitions in reverse routing.        /// i.e. Priorities below 0 are auto-generated have less precedence.        /// </summary>        public int Priority { get; set; }        protected bool Equals(RouteAttribute other)        {            return base.Equals(other)                && string.Equals(Path, other.Path)                && string.Equals(Summary, other.Summary)                && string.Equals(Notes, other.Notes)                && string.Equals(Verbs, other.Verbs)                && Priority == other.Priority;        }        public override bool Equals(object obj)        {            if (ReferenceEquals(null, obj)) return false;            if (ReferenceEquals(this, obj)) return true;            if (obj.GetType() != this.GetType()) return false;            return Equals((RouteAttribute)obj);        }        public override int GetHashCode()        {            unchecked            {                var hashCode = base.GetHashCode();                hashCode = (hashCode * 397) ^ (Path != null ? Path.GetHashCode() : 0);                hashCode = (hashCode * 397) ^ (Summary != null ? Summary.GetHashCode() : 0);                hashCode = (hashCode * 397) ^ (Notes != null ? Notes.GetHashCode() : 0);                hashCode = (hashCode * 397) ^ (Verbs != null ? Verbs.GetHashCode() : 0);                hashCode = (hashCode * 397) ^ Priority;                return hashCode;            }        }    }}
 |