问题标签 [attributerouting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - MVC Web API 属性路由:路由约束错误
我正在使用 Web API nuget 包的属性路由。
我的RegisterRoutes(HttpCollection routes)
方法如下所示:
这是我的控制器之一(为简洁起见,删除了评论):
我遇到的问题是我可以像这样访问上述方法:
http://localhost:55697/schoolinfo/campus?id=2
但是当我尝试这样做时:
http://localhost:55697/schoolinfo/campus/2
我收到以下错误:
具有路由模板“SchoolInfo/Campus/{id}”的路由上的约束条目“id”必须具有字符串值或实现“IHttpRouteConstraint”的类型。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:具有路由模板“SchoolInfo/Campus/{id}”的路由上的约束条目“id”必须具有字符串值或实现“IHttpRouteConstraint”的类型。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[InvalidOperationException:具有路由模板“SchoolInfo/Campus/{id}”的路由上的约束条目“id”必须具有字符串值或者是实现“IHttpRouteConstraint”的类型。]
System.Web.Http.Routing.HttpRoute .ProcessConstraint(HttpRequestMessage request, Object constraint, String parameterName, HttpRouteValueDictionary values, HttpRouteDirection routeDirection) +293 System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage request, HttpRouteValueDictionary values, HttpRouteDirection routeDirection) +99
System.Web.Http.Routing .HttpRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) +195
AttributeRouting.Web.Http.Framework.HttpAttributeRoute.GetRouteData(String virtualPathRoot,HttpRequestMessage 请求)+131
System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +107
System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext) +233
System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +60
System .Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.18044
我不确定如何解决这个问题,因为我已经为 id 参数指定了一个约束。当我用谷歌搜索错误时,我发现的唯一结果涉及设置我上面已有的配置设置。
我检查了我的 routes.axd 文件,里面确实有这个:
有任何想法吗?
更新:
如果我将我的 GET 属性从 更改[GET("{id}")]
为[GET("{id:int}")]
,它可以工作。所以问题似乎与默认路由约束有关。问题是我真的希望使用它们,因为我到处都有 id,而且当它总是一个 int 时,不断地指定它的类型似乎是多余的。
我注意到的另一件事是IntRouteConstraint
该类存在于 4 个不同的程序集中:
但是,该AddDefaultRouteConstraint()
方法将 anIRouteConstraint
作为其第二个参数,并且只有IntRouteConstraint
inAttributeRouting.Web.Constraints
实现了该接口,所以这就是我包含的程序集。我不确定这是否正确。也许这与问题有关?
任何帮助将非常感激。谢谢!
invalidoperationexception - 安装 AttributeRouting 后 Web API 抛出异常
我使用 .NET 4.5 开发了一个简单的 VB .NET Web API 项目
该项目运行良好,但我决定安装AttributeRouting nuget 包。安装此软件包后,每个功能似乎都会引发以下异常:
具有路由模板“Company”的路由上的约束条目“inboundHttpMethod”必须具有字符串值或实现“IHttpRouteConstraint”的类型。
在此消息中,“Company”是一个简单的 GET 方法的路由名称,该方法简单地返回一个对象。每条路线都会导致此错误消息。堆栈跟踪是:
[InvalidOperationException:具有路由模板'Company/{Id}'的路由上的约束条目'inboundHttpMethod'必须具有字符串值或实现'IHttpRouteConstraint'的类型。]
System.Web.Http.Routing.HttpRoute.ProcessConstraint (HttpRequestMessage 请求,对象约束,字符串参数名称,HttpRouteValueDictionary 值,HttpRouteDirection routeDirection)+346 System.Web.Http.Routing.HttpRoute.ProcessConstraints(HttpRequestMessage 请求,HttpRouteValueDictionary 值,HttpRouteDirection routeDirection)+201
System.Web.Http.Routing.HttpRoute .GetRouteData(String virtualPathRoot, HttpRequestMessage request) +430
AttributeRouting.Web.Http.Framework.HttpAttributeRoute.GetRouteData(String virtualPathRoot,HttpRequestMessage 请求)+250
System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +191
System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext) +233
System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +60
System .Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
我发现以下线程描述了我的问题:https ://github.com/mccalltd/AttributeRouting/issues/191
不幸的是,这个修复似乎没有帮助:https ://github.com/mccalltd/AttributeRouting/issues/191#issuecomment-13814025
有想法该怎么解决这个吗?
asp.net-mvc - 未找到 404 参数的属性路由数量
我使用 AttributeRouting 为我的 ActionResult 设置特定路由。当我有这个配置时,我得到了一个 404 页面:
我安装了一个 url 嗅探器来查看 url 触发 404 页面未找到,我得到了这个:http.../Tender/SubmitBid/1/0
它应该可以工作......但我必须删除最新的参数才能达到 ActionResult 我不知道为什么。
谢谢您的帮助,
卡琳娜
编辑 如果我删除属性 [GET("Tender/SubmitBid/{id}/{bidId}")] 该页面可用于 POST 请求。但网址就像 http...//Tender/SubmitBid/1?bidId=0
asp.net-mvc - 带有 http PUT 方法约束的属性路由
我正在使用带有 MVC5 的新属性路由,并通过将and属性添加到我的操作方法中来获得 httpGET
和方法约束。但是当我添加时,我只会得到一个 404 错误页面。有谁知道我需要做什么才能使属性路由与 http 一起使用?请参见下面的代码:POST
[HttpGet]
[HttpPost]
[HttpPut]
PUT
我试过了X-HTTP-Method-Override=PUT
而且还带有真实的PUT
c# - How to convert this fix this ASP.NET MVC5 route?
I'm not sure how to convert this AttributeRoute into an MVC5 route.
The IsAbsoluteUrl
is one of the things that is confusing me.
c# - 当要路由的部件少于 4 个时,Web API 属性路由不起作用
这是一个随机的,它让我感到困惑。
我刚刚将我的项目更新为 WebAPI 2,因此我可以使用新的属性路由功能。我按照官方网站上的教程进行操作,最后在我的全局文件中得到了这样的配置:
然后在WebApiConfig
课堂上我像这样设置属性路由:
然后我想要一个带有路由“api/users/{id}”的操作方法:
到目前为止,这一切对我来说都很好。但是,当我尝试走这条路线时,我得到了一个例外:
IControllerFactory 'withoomph.Common.Ioc.DependencyControllerFactory' 没有返回名称为 'api' 的控制器。
这DependencyControllerFactory
是我为我的MVC控制器进行依赖注入的地方,所以不确定它为什么会去那里。
奇怪的是,如果我改变路线,让它有一个额外的部分:
有用!我已经在几个不同的控制器中尝试了这个,使用不同的名称,使用 api,不使用 api 等。它总是一样的:如果路由少于 4 个部分,它就不起作用。超过4个,它的工作原理。
有谁知道他在搞什么鬼??!!
jsonp - WebApiContrib Jsonp 和属性路由
根据WebApiContrib.Formatting.Jsonp GitHub 自述文件,似乎应该在 RouteConfig.cs 中输入:
我的 AppStart 中目前没有 RouteConfig.cs 文件。我使用 Web API 2 模板创建了它,我认为我没有在结构上进行任何更改。我确实有一个 WebApiConfig.cs 我已经设置:
如何包含它以使所有路由都能够返回 Jsonp?
asp.net-mvc - 具有属性路由的 Web API 2 获得相同的关键错误
为什么我不断收到以下有关重复键的错误?在我尝试属性路由之前,这很好用,但现在不行。如果我删除{id:int}
它总是命中第二种方法,而不是第一种,即使没有提供 ID。
事件控制器
访问 /api/v1/events?id=12315 时出错
WebApiConfig.cs
c# - (ASP MVC4) 属性路由/RedirectToRoute
我需要一些帮助来实现我想要实现的目标。我正在做一个 ASP MVC 应用程序,但我无法正确制作路线。
我正在使用 nuget 包属性路由(现在在 MVC5 中默认使用)。
首先,我在正确匹配正确事物的所有路线上使用它没有任何问题,但后来我开始致力于国际化,一切都搞砸了!
所以这里的问题是:
我需要获取这些网址:domain/culture/id/product/action,但我的产品只有一个 Action。因此,当用户访问我的网站时,它会设置语言,然后将他重定向到他询问的产品(如果没有询问,则使用默认产品)
我试过了
return RedirectToRoute("/" + cultureName + "/" + id + "/" + productName + "/");
但它没有告诉我路线不存在,这是不可能的,因为在我的路由资源管理器中,我清楚地看到了路线 /{culture}/{id}/ProductName
是否可以这样做,或者我需要改变我对路由的思考方式?
c# - Web API 中的多个 GET 调用错误的操作
我有一个Web API
,看起来像下面...
当我调用第一种方法Get
时,它工作正常。当我使用 fiddler 或 Chrome REST Client 调用第二种方法GetMiniLeagueTable
时,我收到以下错误:
{ 消息:“请求无效。” MessageDetail:“参数字典包含不可为空类型‘CompetitionManager+MiniLeagueType’的参数‘类型’的空条目,用于‘LeaguesController’中的方法‘System.Collections.Generic.List`1[Competition] Get(Int32, MiniLeagueType)’ '. 可选参数必须是引用类型、可空类型或声明为可选参数。” }
我AttributeRouting
用来装饰方法,但这似乎不起作用。在我介绍之前它运行良好MiniLeagueType
。
有没有人遇到过这个问题,或者你能指出我哪里出错了吗?