本文整理汇总了C#中ODataPath类的典型用法代码示例。如果您正苦于以下问题:C# ODataPath类的具体用法?C# ODataPath怎么用?C# ODataPath使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ODataPath类属于命名空间,在下文中一共展示了ODataPath类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: VerifyPath
/// <summary>
/// Enumerates the segments in a path and calls a corresponding delegate verifier on each segment.
/// Do not overuse this method: most test cases don't need to over-baseline what the expected segments are.
/// </summary>
public static void VerifyPath(ODataPath path, Action<ODataPathSegment>[] segmentVerifiers)
{
path.Count().Should().Be(segmentVerifiers.Count());
var i = 0;
foreach (var segment in path)
{
segmentVerifiers[i++](segment);
}
}
示例2: CreateImplicitRangeVariable
/// <summary>
/// Creates a <see cref="RangeVariable"/> for an implicit parameter ($it) from an <see cref="ODataPath"/>.
/// </summary>
/// <param name="path"><see cref="ODataPath"/> that the range variable is iterating over.</param>
/// <returns>A new <see cref="RangeVariable"/>.</returns>
internal static RangeVariable CreateImplicitRangeVariable(ODataPath path)
{
ExceptionUtils.CheckArgumentNotNull(path, "path");
IEdmTypeReference elementType = path.EdmType();
if (elementType == null)
{
// This case if for something like a void service operation
// This is pretty ugly; if pratice we shouldn't be creating a parameter node for this case I think
return null;
}
if (elementType.IsCollection())
{
elementType = elementType.AsCollection().ElementType();
}
if (elementType.IsEntity())
{
IEdmEntityTypeReference entityTypeReference = elementType as IEdmEntityTypeReference;
return new EntityRangeVariable(ExpressionConstants.It, entityTypeReference, path.NavigationSource());
}
return new NonentityRangeVariable(ExpressionConstants.It, elementType, null);
}
示例3: ODataUri
/// <summary>
/// Create a new ODataUri. This contains the semantic meaning of the
/// entire uri.
/// </summary>
/// <param name="parameterAliasValueAccessor">The ParameterAliasValueAccessor.</param>
/// <param name="path">The top level path for this uri.</param>
/// <param name="customQueryOptions">Any custom query options for this uri. Can be null.</param>
/// <param name="selectAndExpand">Any $select or $expand option for this uri. Can be null.</param>
/// <param name="filter">Any $filter option for this uri. Can be null.</param>
/// <param name="orderby">Any $orderby option for this uri. Can be null</param>
/// <param name="search">Any $search option for this uri. Can be null</param>
/// <param name="apply">Any $apply option for this uri. Can be null</param>
/// <param name="skip">Any $skip option for this uri. Can be null.</param>
/// <param name="top">Any $top option for this uri. Can be null.</param>
/// <param name="queryCount">Any query $count option for this uri. Can be null.</param>
internal ODataUri(
ParameterAliasValueAccessor parameterAliasValueAccessor,
ODataPath path,
IEnumerable<QueryNode> customQueryOptions,
SelectExpandClause selectAndExpand,
FilterClause filter,
OrderByClause orderby,
SearchClause search,
ApplyClause apply,
long? skip,
long? top,
bool? queryCount)
{
this.ParameterAliasValueAccessor = parameterAliasValueAccessor;
this.Path = path;
this.CustomQueryOptions = new ReadOnlyCollection<QueryNode>(customQueryOptions.ToList());
this.SelectAndExpand = selectAndExpand;
this.Filter = filter;
this.OrderBy = orderby;
this.Search = search;
this.Apply = apply;
this.Skip = skip;
this.Top = top;
this.QueryCount = queryCount;
}
示例4: AppendNavigationPropertySegment
/// <summary>
/// Build a segment representing a navigation property.
/// </summary>
/// <param name="path">Path to perform the computation on.</param>
/// <param name="navigationProperty">The navigation property this segment represents.</param>
/// <param name="navigationSource">The navigation source of the entities targetted by this navigation property. This can be null.</param>
/// <returns>The ODataPath with navigation property appended in the end in the end</returns>
public static ODataPath AppendNavigationPropertySegment(this ODataPath path, IEdmNavigationProperty navigationProperty, IEdmNavigationSource navigationSource)
{
var newPath = new ODataPath(path);
NavigationPropertySegment np = new NavigationPropertySegment(navigationProperty, navigationSource);
newPath.Add(np);
return newPath;
}
示例5: SelectAction_Returns_ExpectedMethodOnBaseType
public void SelectAction_Returns_ExpectedMethodOnBaseType(string method, string[] methodsInController,
string expectedSelectedAction)
{
// Arrange
string key = "42";
CustomersModelWithInheritance model = new CustomersModelWithInheritance();
var ordersProperty = model.Customer.FindProperty("Orders") as IEdmNavigationProperty;
ODataPath odataPath = new ODataPath(new EntitySetPathSegment(model.Customers), new KeyValuePathSegment(key),
new LinksPathSegment(), new NavigationPathSegment(ordersProperty));
HttpControllerContext controllerContext = CreateControllerContext(method);
var actionMap = GetMockActionMap(methodsInController);
// Act
string selectedAction = new LinksRoutingConvention().SelectAction(odataPath, controllerContext, actionMap);
// Assert
Assert.Equal(expectedSelectedAction, selectedAction);
if (expectedSelectedAction == null)
{
Assert.Empty(controllerContext.RouteData.Values);
}
else
{
Assert.Equal(2, controllerContext.RouteData.Values.Count);
Assert.Equal(key, controllerContext.RouteData.Values["key"]);
Assert.Equal(ordersProperty.Name, controllerContext.RouteData.Values["navigationProperty"]);
}
}
示例6: SelectController
/// <summary>
/// Selects the controller for OData requests.
/// </summary>
/// <param name="odataPath">The OData path.</param>
/// <param name="request">The request.</param>
/// <returns>
/// <c>null</c> if the request isn't handled by this convention; otherwise, the name of the selected controller
/// </returns>
public virtual string SelectController(ODataPath odataPath, HttpRequestMessage request)
{
if (odataPath == null)
{
throw Error.ArgumentNull("odataPath");
}
if (request == null)
{
throw Error.ArgumentNull("request");
}
// entity set
EntitySetPathSegment entitySetSegment = odataPath.Segments.FirstOrDefault() as EntitySetPathSegment;
if (entitySetSegment != null)
{
return entitySetSegment.EntitySetName;
}
// singleton
SingletonPathSegment singletonSegment = odataPath.Segments.FirstOrDefault() as SingletonPathSegment;
if (singletonSegment != null)
{
return singletonSegment.SingletonName;
}
return null;
}
示例7: SelectAction
/// <summary>
/// Selects the action for OData requests.
/// </summary>
/// <param name="odataPath">The OData path.</param>
/// <param name="controllerContext">The controller context.</param>
/// <param name="actionMap">The action map.</param>
/// <returns>
/// <c>null</c> if the request isn't handled by this convention; otherwise, the name of the selected action
/// </returns>
public string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
{
if (odataPath == null)
{
throw Error.ArgumentNull("odataPath");
}
if (controllerContext == null)
{
throw Error.ArgumentNull("controllerContext");
}
if (actionMap == null)
{
throw Error.ArgumentNull("actionMap");
}
if (odataPath.PathTemplate == "~")
{
return "GetServiceDocument";
}
if (odataPath.PathTemplate == "~/$metadata")
{
return "GetMetadata";
}
return null;
}
示例8: AddLinkInfoToRouteData
private static void AddLinkInfoToRouteData(IHttpRouteData routeData, ODataPath odataPath)
{
KeyValuePathSegment keyValueSegment = odataPath.Segments[1] as KeyValuePathSegment;
routeData.Values[ODataRouteConstants.Key] = keyValueSegment.Value;
NavigationPathSegment navigationSegment = odataPath.Segments[3] as NavigationPathSegment;
routeData.Values[ODataRouteConstants.NavigationProperty] = navigationSegment.NavigationProperty.Name;
}
示例9: ProcessUpdateEntityReference
private void ProcessUpdateEntityReference(IODataRequestMessage requestMessage, IODataResponseMessage responseMessage, ODataPath odataPath)
{
// This is for change the reference in single-valued navigation property
// PUT ~/Person(0)/Parent/$ref
// {
// "@odata.context": "http://host/service/$metadata#$ref",
// "@odata.id": "Orders(10643)"
// }
if (this.HttpMethod == HttpMethod.PATCH)
{
throw Utility.BuildException(HttpStatusCode.MethodNotAllowed, "PATCH on a reference link is not supported.", null);
}
// Get the parent first
var level = this.QueryContext.QueryPath.Count - 2;
var parent = this.QueryContext.ResolveQuery(this.DataSource, level);
var navigationPropertyName = ((NavigationPropertyLinkSegment)odataPath.LastSegment).NavigationProperty.Name;
using (var messageReader = new ODataMessageReader(requestMessage, this.GetReaderSettings(), this.DataSource.Model))
{
var referenceLink = messageReader.ReadEntityReferenceLink();
var queryContext = new QueryContext(this.ServiceRootUri, referenceLink.Url, this.DataSource.Model);
var target = queryContext.ResolveQuery(this.DataSource);
this.DataSource.UpdateProvider.UpdateLink(parent, navigationPropertyName, target);
this.DataSource.UpdateProvider.SaveChanges();
}
ResponseWriter.WriteEmptyResponse(responseMessage);
}
示例10: GetProperty
private static IEdmProperty GetProperty(ODataPath odataPath, HttpMethod method)
{
PropertyAccessPathSegment segment = null;
if (method == HttpMethod.Get)
{
if (odataPath.PathTemplate == "~/entityset/key/property" ||
odataPath.PathTemplate == "~/entityset/key/cast/property" ||
odataPath.PathTemplate == "~/singleton/property" ||
odataPath.PathTemplate == "~/singleton/cast/property")
{
segment = odataPath.Segments[odataPath.Segments.Count - 1] as PropertyAccessPathSegment;
}
else if (odataPath.PathTemplate == "~/entityset/key/property/$value" ||
odataPath.PathTemplate == "~/entityset/key/cast/property/$value" ||
odataPath.PathTemplate == "~/singleton/property/$value" ||
odataPath.PathTemplate == "~/singleton/cast/property/$value" ||
odataPath.PathTemplate == "~/entityset/key/property/$count" ||
odataPath.PathTemplate == "~/entityset/key/cast/property/$count" ||
odataPath.PathTemplate == "~/singleton/property/$count" ||
odataPath.PathTemplate == "~/singleton/cast/property/$count")
{
segment = odataPath.Segments[odataPath.Segments.Count - 2] as PropertyAccessPathSegment;
}
}
return segment == null ? null : segment.Property;
}
示例11: BindPath
/// <summary>
/// Binds a collection of <paramref name="segments"/> to metadata, creating a semantic ODataPath object.
/// </summary>
/// <param name="segments">Collection of path segments.</param>
/// <param name="configuration">The configuration to use when binding the path.</param>
/// <returns>A semantic <see cref="ODataPath"/> object to describe the path.</returns>
internal static ODataPath BindPath(ICollection<string> segments, ODataUriParserConfiguration configuration)
{
ODataPathParser semanticPathParser = new ODataPathParser(configuration);
var intermediateSegments = semanticPathParser.ParsePath(segments);
ODataPath path = new ODataPath(intermediateSegments);
return path;
}
示例12: SelectAction
/// <summary>
/// Selects the action for OData requests.
/// </summary>
/// <param name="odataPath">The OData path.</param>
/// <param name="controllerContext">The controller context.</param>
/// <param name="actionMap">The action map.</param>
/// <returns>
/// <c>null</c> if the request isn't handled by this convention; otherwise, the name of the selected action
/// </returns>
public override string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
{
if (odataPath == null)
{
throw Error.ArgumentNull("odataPath");
}
if (controllerContext == null)
{
throw Error.ArgumentNull("controllerContext");
}
if (actionMap == null)
{
throw Error.ArgumentNull("actionMap");
}
if (odataPath.PathTemplate == "~/entityset/key" ||
odataPath.PathTemplate == "~/entityset/key/cast")
{
HttpMethod httpMethod = controllerContext.Request.Method;
string httpMethodName;
switch (httpMethod.ToString().ToUpperInvariant())
{
case "GET":
httpMethodName = "Get";
break;
case "PUT":
httpMethodName = "Put";
break;
case "PATCH":
case "MERGE":
httpMethodName = "Patch";
break;
case "DELETE":
httpMethodName = "Delete";
break;
default:
return null;
}
Contract.Assert(httpMethodName != null);
IEdmEntityType entityType = odataPath.EdmType as IEdmEntityType;
// e.g. Try GetCustomer first, then fallback on Get action name
string actionName = actionMap.FindMatchingAction(
httpMethodName + entityType.Name,
httpMethodName);
if (actionName != null)
{
KeyValuePathSegment keyValueSegment = odataPath.Segments[1] as KeyValuePathSegment;
controllerContext.RouteData.Values[ODataRouteConstants.Key] = keyValueSegment.Value;
return actionName;
}
}
return null;
}
示例13: SelectAction
/// <inheritdoc/>
public override string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap)
{
if (odataPath == null)
{
throw Error.ArgumentNull("odataPath");
}
if (controllerContext == null)
{
throw Error.ArgumentNull("controllerContext");
}
if (actionMap == null)
{
throw Error.ArgumentNull("actionMap");
}
string prefix;
ComplexCastPathSegment cast;
IEdmProperty property = GetProperty(odataPath, controllerContext.Request.Method, out prefix, out cast);
IEdmEntityType declaringType = property == null ? null : property.DeclaringType as IEdmEntityType;
if (declaringType != null)
{
string actionName;
if (cast == null)
{
actionName = actionMap.FindMatchingAction(
prefix + property.Name + "From" + declaringType.Name,
prefix + property.Name);
}
else
{
// for example: GetCityOfSubAddressFromVipCustomer or GetCityOfSubAddress
actionName = actionMap.FindMatchingAction(
prefix + property.Name + "Of" + cast.CastType.Name + "From" + declaringType.Name,
prefix + property.Name + "Of" + cast.CastType.Name);
}
if (actionName != null)
{
if (odataPath.PathTemplate.StartsWith("~/entityset/key", StringComparison.Ordinal))
{
EntitySetPathSegment entitySetPathSegment = (EntitySetPathSegment)odataPath.Segments.First();
IEdmEntityType edmEntityType = entitySetPathSegment.EntitySetBase.EntityType();
KeyValuePathSegment keyValueSegment = (KeyValuePathSegment)odataPath.Segments[1];
controllerContext.AddKeyValueToRouteData(keyValueSegment, edmEntityType, ODataRouteConstants.Key);
}
return actionName;
}
}
return null;
}
示例14: EntitySetComputedForEntitySetSegment
public void EntitySetComputedForEntitySetSegment()
{
var entitySet = mbh.BuildValidEntitySet();
var path = new ODataPath(new ODataPathSegment[]
{
new EntitySetSegment(entitySet)
});
path.NavigationSource().Should().BeSameAs(entitySet);
}
示例15: TypeComputedForEntitySetSegment
public void TypeComputedForEntitySetSegment()
{
var entitySet = mbh.BuildValidEntitySet();
var path = new ODataPath(new ODataPathSegment[]
{
new EntitySetSegment(entitySet)
});
path.EdmType().Should().BeSameAs(entitySet);
}