【问题标题】:How do I get rid of this error caused by MVCAttribute routing?如何摆脱 MVC 属性路由引起的这个错误?
【发布时间】:2017-02-13 17:39:09
【问题描述】:

我在约定路由旁边启用了 MVC 属性路由。每次运行应用程序时都会出现此错误。

类型的内联约束解析器 “DefaultInlineConstraintResolver”无法解决以下问题 内联约束:“字符串”。描述:未处理的异常 在执行当前 Web 请求期间发生。请 查看堆栈跟踪以获取有关错误和位置的更多信息 它起源于代码。

异常详细信息:System.InvalidOperationException:内联 “DefaultInlineConstraintResolver”类型的约束解析器是 无法解决以下内联约束:“字符串”。

这是堆栈跟踪:

[InvalidOperationException: 类型的内联约束解析器 “DefaultInlineConstraintResolver”无法解决以下问题 内联约束:“字符串”。]
System.Web.Mvc.Routing.InlineRouteTemplateParser.GetInlineConstraint(组 constraintGroup, Boolean isOptional, IInlineConstraintResolver 约束解析器)+389
System.Web.Mvc.Routing.InlineRouteTemplateParser.ParseRouteTemplate(字符串 routeTemplate,IDictionary2 defaults, IDictionary2 约束, IInlineConstraintResolver constraintResolver) +488
System.Web.Mvc.Routing.DirectRouteFactoryContext.CreateBuilder(字符串 模板,IInlineConstraintResolver constraintResolver) +308
System.Web.Mvc.Routing.DirectRouteFactoryContext.CreateBuilderInternal(字符串 模板)+48
System.Web.Mvc.Routing.DirectRouteFactoryContext.CreateBuilder(字符串 模板)+44
System.Web.Mvc.RouteAttribute.System.Web.Mvc.Routing.IDirectRouteFactory.CreateRoute(DirectRouteFactoryContext 上下文)+80
System.Web.Mvc.Routing.DefaultDirectRouteProvider.CreateRouteEntry(字符串 areaPrefix, String controllerPrefix, IDirectRouteFactory factory, IReadOnlyCollection1 actions, IInlineConstraintResolver constraintResolver, Boolean targetIsAction) +115
System.Web.Mvc.Routing.DefaultDirectRouteProvider.CreateRouteEntries(String areaPrefix, String controllerPrefix, IReadOnlyCollection
1 个工厂, IReadOnlyCollection1 actions, IInlineConstraintResolver constraintResolver, Boolean targetIsAction) +155
System.Web.Mvc.Routing.DefaultDirectRouteProvider.GetActionDirectRoutes(ActionDescriptor actionDescriptor, IReadOnlyList
1 个工厂,IInlineConstraintResolver 约束解析器)+188
System.Web.Mvc.Routing.DefaultDirectRouteProvider.GetDirectRoutes(ControllerDescriptor 控制器描述符,IReadOnlyList1 actionDescriptors, IInlineConstraintResolver constraintResolver) +245
System.Web.Mvc.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, IEnumerable
1 控制器类型,IInlineConstraintResolver constraintResolver, IDirectRouteProvider directRouteProvider) +234
System.Web.Mvc.Routing.AttributeRoutingMapper.MapAttributeRoutes(RouteCollection 路由,IEnumerable`1 控制器类型,IInlineConstraintResolver constraintResolver, IDirectRouteProvider directRouteProvider) +333
System.Web.Mvc.Routing.AttributeRoutingMapper.MapAttributeRoutes(RouteCollection 路线,IInlineConstraintResolver 约束解析器, IDirectRouteProvider directRouteProvider) +398
System.Web.Mvc.Routing.AttributeRoutingMapper.MapAttributeRoutes(RouteCollection 路线,IInlineConstraintResolver constraintResolver) +192
System.Web.Mvc.RouteCollectionAttributeRoutingExtensions.MapMvcAttributeRoutes(RouteCollection 路线)+123
SocialManager.RouteConfig.RegisterRoutes(RouteCollection routes) 在 c:\Users\Naser Dostdar\Documents\Visual Studio 2013\Projects\SocialManager\SocialManager\App_Start\RouteConfig.cs:16 c:\Users\Naser 中的 SocialManager.MvcApplication.Application_Start() Dostdar\Documents\Visual Studio 2013\Projects\SocialManager\SocialManager\Global.asax.cs:18

[HttpException (0x80004005): 类型的内联约束解析器 “DefaultInlineConstraintResolver”无法解决以下问题 内联约束:“字符串”。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+9942821
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+118
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+352
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): 类型的内联约束解析器 “DefaultInlineConstraintResolver”无法解决以下问题 内联约束:“字符串”。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +9924184 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+261

这是我的 Route.Config 文件的样子:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        routes.MapRoute(null, "Page{page}",
        new
        {
            controller = "Blogs",
            action = "Index",
            category =
                (string)null
        },
        new { page = @"\d+" }
        );
        routes.MapRoute(null,
        "{category}",
        new { controller = "Blogs", action = "Edit", page = 1 }
        );
        routes.MapRoute(null,
        "{category}/Page{page}",
        new { controller = "Blogs", action = "List" },
        new { page = @"\d+" }
        );
        routes.MapRoute(null, "{controller}/{action}");


        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

P.S:我目前还没有在我的项目中定义任何 MVC 属性路由,只是想测试启用 MVC 属性路由功能。

Web API 版本:2.2

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing attributerouting


    【解决方案1】:

    Somewhere 你已经定义了一个属性路由。没有其他东西会导致此错误。在您执行此操作的地方,您使用了string 作为路由约束。例如:

    [Route("{foo:string}")]
    

    但是,string 不是有效的路由约束,因为路由中的 everything 都是字符串。总而言之,找到您定义的包含:string 的路由属性并将其删除。

    【讨论】:

    • 哎呀克里斯,我的错!!!我真的不知道我什么时候确实定义了一个带有字符串约束的路由,但是有一个,现在一切正常!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多