diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-25 15:02:04 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-25 15:02:04 -0400 |
| commit | ef6b90b8e6e6c317fcda85a392c79324f91250db (patch) | |
| tree | 570c78c0915d3608399f003038b66d56e5e29e84 /MediaBrowser.Model/Services/RouteAttribute.cs | |
| parent | edbe28d9fc3091121b7e2323fe42d62a70c9e351 (diff) | |
make controller project portable
Diffstat (limited to 'MediaBrowser.Model/Services/RouteAttribute.cs')
| -rw-r--r-- | MediaBrowser.Model/Services/RouteAttribute.cs | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/MediaBrowser.Model/Services/RouteAttribute.cs b/MediaBrowser.Model/Services/RouteAttribute.cs new file mode 100644 index 000000000..5a39688da --- /dev/null +++ b/MediaBrowser.Model/Services/RouteAttribute.cs @@ -0,0 +1,144 @@ +using 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; } + + /// <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; + } + } + } +} |
