Skip to content

LockRecursionException after update #703

Closed
@EdwardFinn

Description

@EdwardFinn

Updating via Nuget from Microsoft.AspNet.WebApi.Versioning 4.0.0 to 4.1.0 results in System.Threading.LockRecursionException

Error is thrown from
System.Web.Http.HttpRequestMessageExtensions.ApiVersionProperties( this HttpRequestMessage request )

System.Threading.LockRecursionException
  HResult=0x80131500
  Message=Recursive read lock acquisitions not allowed in this mode.
  at System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker timeout)
    at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker timeout)
    at System.Web.Routing.RouteCollection.GetReadLock()
    at System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext)
    at System.Web.Http.WebHost.Routing.HostedHttpRouteCollection.GetRouteData(HttpRequestMessage request)
    at System.Web.Http.HttpRequestMessageExtensions.ApiVersionProperties(HttpRequestMessage request)
    at Microsoft.Web.Http.Routing.ApiVersionRouteConstraint.Match(HttpRequestMessage request, IHttpRoute route, String parameterName, IDictionary`2 values, HttpRouteDirection routeDirection)
    at System.Web.Http.WebHost.Routing.HttpWebRoute.ProcessConstraint(HttpContextBase httpContext, Object constraint, String parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    at System.Web.Routing.Route.ProcessConstraints(HttpContextBase httpContext, RouteValueDictionary values, RouteDirection routeDirection)
    at System.Web.Routing.Route.GetRouteData(HttpContextBase httpContext)
    at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)

configuration is by namespace

            DefaultInlineConstraintResolver constraintResolver = new DefaultInlineConstraintResolver()
            {
                ConstraintMap = {
                                    ["apiVersion"] = typeof( ApiVersionRouteConstraint )
                                }
            };
            config.MapHttpAttributeRoutes(constraintResolver);
            config.AddApiVersioning(options =>
            {
                options.ReportApiVersions = true;
                options.Conventions.Add(new VersionByNamespaceConvention());
            });

            //Change default route to include api version
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "v{apiVersion}/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional },
                constraints: new { apiVersion = new ApiVersionRouteConstraint() }
            );

And not sure its if matters but version is single number

namespace Test.API.Controllers.v1
{
    [RoutePrefix("v{version:apiVersion}/GlobalSettings")]
    public class GlobalSettingsController : ApiController
    {
        [HttpGet]
        public string GetSetting(string key)
        {
            return "TEST";
        }

    }
}

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions