Port IRouteConstraint to the dispatcher project
This commit is contained in:
parent
fdc5f21428
commit
df78db934d
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Dispatcher
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the purpose for invoking an <see cref="IDispatcherValueConstraint"/>.
|
||||||
|
/// </summary>
|
||||||
|
public enum ConstraintPurpose
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A request URL is being processed by the dispatcher.
|
||||||
|
/// </summary>
|
||||||
|
IncomingRequest,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A URL is being created by a template.
|
||||||
|
/// </summary>
|
||||||
|
TemplateExecution,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Dispatcher
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A context object for <see cref="IDispatcherValueConstraint"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class DispatcherValueConstraintContext
|
||||||
|
{
|
||||||
|
private HttpContext _httpContext;
|
||||||
|
private DispatcherValueCollection _values;
|
||||||
|
private ConstraintPurpose _purpose;
|
||||||
|
private string _key;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="DispatcherValueConstraintContext"/>.
|
||||||
|
/// </summary>
|
||||||
|
public DispatcherValueConstraintContext()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="DispatcherValueConstraintContext"/> for the current request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="httpContext">The <see cref="Http.HttpContext"/> associated with the current request.</param>
|
||||||
|
/// <param name="values">The <see cref="DispatcherValueCollection"/> for the current operation.</param>
|
||||||
|
/// <param name="purpose">The purpose for invoking the constraint.</param>
|
||||||
|
public DispatcherValueConstraintContext(HttpContext httpContext, DispatcherValueCollection values, ConstraintPurpose purpose)
|
||||||
|
{
|
||||||
|
if (httpContext == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(httpContext));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (values == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(values));
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpContext = httpContext;
|
||||||
|
Values = values;
|
||||||
|
Purpose = purpose;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="Http.HttpContext"/> associated with the current request.
|
||||||
|
/// </summary>
|
||||||
|
public HttpContext HttpContext
|
||||||
|
{
|
||||||
|
get => _httpContext;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
_httpContext = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the key associated with the current <see cref="IDispatcherValueConstraint"/>.
|
||||||
|
/// </summary>
|
||||||
|
public string Key
|
||||||
|
{
|
||||||
|
get => _key;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
_key = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the purpose of executing the <see cref="IDispatcherValueConstraint"/>.
|
||||||
|
/// </summary>
|
||||||
|
public ConstraintPurpose Purpose
|
||||||
|
{
|
||||||
|
get => _purpose;
|
||||||
|
set => _purpose = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="DispatcherValueCollection"/> associated with the current operation.
|
||||||
|
/// </summary>
|
||||||
|
public DispatcherValueCollection Values
|
||||||
|
{
|
||||||
|
get => _values;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
_values = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Dispatcher
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Defines the contract that a class must implement in order to check whether a URL parameter
|
||||||
|
/// value is valid for a constraint.
|
||||||
|
/// </summary>
|
||||||
|
public interface IDispatcherValueConstraint
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the current operation should succeed or fail, typically by validating one or
|
||||||
|
/// more values in <see cref="DispatcherValueConstraintContext.Values"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The <see cref="DispatcherValueConstraintContext"/> associated with the current operation.</param>
|
||||||
|
/// <returns><c>true</c> if the current operation should proceed; otherwise <c>false</c>.</returns>
|
||||||
|
bool Match(DispatcherValueConstraintContext context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue