#nullable disable
#pragma warning disable CS1591
using System;
namespace MediaBrowser.Model.Services
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class RouteAttribute : Attribute
{
///
/// Initializes an instance of the class.
///
///
/// The path template to map to the request. See
/// RouteAttribute.Path
/// for details on the correct format.
///
public RouteAttribute(string path)
: this(path, null)
{
}
///
/// Initializes an instance of the class.
///
///
/// The path template to map to the request. See
/// RouteAttribute.Path
/// for details on the correct format.
///
/// A comma-delimited list of HTTP verbs supported by the
/// service. If unspecified, all verbs are assumed to be supported.
public RouteAttribute(string path, string verbs)
{
Path = path;
Verbs = verbs;
}
///
/// Gets or sets the path template to be mapped to the request.
///
///
/// A value providing the path mapped to
/// the request. Never .
///
///
/// Some examples of valid paths are:
///
///
/// - "/Inventory"
/// - "/Inventory/{Category}/{ItemId}"
/// - "/Inventory/{ItemPath*}"
///
///
/// 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.
///
/// 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.
///
/// 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.
///
/// 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.
///
public string Path { get; set; }
///
/// Gets or sets short summary of what the route does.
///
public string Summary { get; set; }
public string Description { get; set; }
public bool IsHidden { get; set; }
///
/// Gets or sets longer text to explain the behaviour of the route.
///
public string Notes { get; set; }
///
/// Gets or sets a comma-delimited list of HTTP verbs supported by the service, such as
/// "GET,PUT,POST,DELETE".
///
///
/// A providing a comma-delimited list of HTTP verbs supported
/// by the service, or empty if all verbs are supported.
///
public string Verbs { get; set; }
///
/// Used to rank the precedences of route definitions in reverse routing.
/// i.e. Priorities below 0 are auto-generated have less precedence.
///
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;
}
}
}
}