问题标签 [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 - 重载什么类以将域参数添加到 ASP.NET MVC 5.1 属性路由(多租户 mvc 应用程序)
我基本上有一个 MVC 项目,它响应不同的应用程序到多个域: - http://www.mydomain1.com - http://www.mydomain2.com 等
我正在寻找扩展 MVC 5.1 属性路由以在声明级别处理域名,因此我可以在我的类控制器上编写如下内容:
[RoutePrefix(domain = "www.mydomain1.com", prefix = "account")]
asp.net - 删除 POST 提交的附加路由参数
我有一个使用新的 MVC5 RouteAttribute 的路由定义,看起来像这样-
这会加载一个视图,该视图包含一个允许用户提供新密码和确认密码的表单,并且还将密码重置令牌和用户 ID 值作为隐藏字段提交。可以通过以下 URL 访问视图 -
使用视图代码-
提供了定义的动作和控制器后,我希望看到 URL -
/帐户/重置密码/
对于表单操作。我看到的不是这个——
/帐户/重置密码/2/0tLb2N1eVc3a2dHMkxqNVlX.....
POST 控制器操作定义如下所示 -
额外的路由参数导致 POST 请求失败并返回 404。
我尝试在 BeginForm 方法中提供“null”作为路由值参数,或者专门将“user”和“token”设置为空字符串,但在所有情况下都保留了原始 GET 参数。我发现的唯一解决方法是完全更改 POST 操作的名称,在这种情况下,它会按预期呈现 -
有没有办法可以为 POST 操作保留相同的操作名称,但不让 BeginForm 方法附加我不需要的额外参数?如有必要,我准备将其明确写为表单元素,但是有没有办法使用内置方法来实现这一点?如果没有别的,为了一致性。
c# - 使用属性路由时如何获取 Mvc 5 控制器的 ActionDescriptor?
我正在尝试为使用Attribute Routing的控制器上的操作获取ActionDescriptor,但它始终为空。
根据我的研究,我发现在ActionMethodSelectorBase类中有一个名为PopulateLookupTables的方法,它拆分了您提供给它的控制器中的所有方法。在该方法内部,它将 MethodInfo 列表过滤为 2 组列表。
- AliasedMethods - 所有没有使用 ActionNameSelectorAttribute 修饰的直接路由的操作方法。
- NonAliasedMethods - 所有没有直接路由且未使用 ActionNameSelectorAttribute 修饰的操作方法。
注意:如果在控制器级别设置了直接路由 (RouteAttribute),则 AliasedMethods 和 NonAliasedMethods 将为空。
注意:直接路由被定义为控制器中的方法(不包括构造函数和事件),并用继承自 IRouteInfoProvider 或 IDirectRouteFactory 的属性装饰(RouteAttribute 继承自这两者)。
和
- DirectRouteMethods - 使用某种形式的 IRouteInfoProvider 直接装饰它们的方法。
- StandardRouteMethods - 没有直接装饰它们的 IRouteInfoProvider 的方法。(包括具有 RouteAttribute 但该方法没有 RouteAttribute 的控制器中的操作方法)。
当ReflectedControllerDescriptor.FindAction被调用时,它在内部调用ActionMethodSelectorBase.FindActionMethods只查看AliasedMethods和NonAliasedMethods(排除所有具有直接路由的操作)。
当ReflectedControllerDescriptor.GetCanonicalActions被调用时,它会在内部调用ReflectedControllerDescriptor.GetAllActionMethodsFromSelector ,它只查看AliasedMethods和NonAliasedMethods(排除所有具有直接路由的操作)。
据我所见,DirectRouteMethods仅在一个地方使用,即RouteCollection.MapMvcAttributeRoutes扩展方法。这意味着RouteTable.Routes集合有一个RouteCollectionRoute到该操作,但我不知道如何获得它。
有谁知道如何为具有RouteAttribute的操作获取ActionDescriptor
c# - 具有 MVC5 属性路由的模糊路由
使用属性路由时,我遇到了不明确的路由问题。问题源于(我相信)在我们的路线根部使用可变参数。让我烦恼的是文字参数似乎没有优先权,而且 MVC5 无法确定使用哪个路由。
我以前在其他路线上遇到过这种情况,并认为我已经通过定义约定路线来解决问题。考虑到这一点,我在哪里可以找到有关属性路由和解决歧义的最佳实践的更多信息?
这是我遇到问题的代码以及异常。
“/”应用程序中的服务器错误。
找到多个与 URL 匹配的控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况。
该请求找到了以下匹配的控制器类型:
帐户控制器
圆形控制器
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:找到与 URL 匹配的多个控制器类型。如果多个控制器上的属性路由与请求的 URL 匹配,就会发生这种情况。
该请求找到了以下匹配的控制器类型:
帐户控制器
圆形控制器
路由配置.cs
RoundController.cs
AccountController.cs
asp.net-mvc - 根据参数名称添加全局路由约束
使用AttributeRouting库,我能够将属性路由配置为使用基于参数名称的默认路由约束。
例如,要为所有以year结尾的路由参数添加RegexRouteConstraint:
我知道MVC5 中的自定义路由约束,但我真的希望能够根据参数名称按约定添加一些约束。
是否可以对 MVC5.1 的属性路由功能做同样的事情?
asp.net-mvc - 使用带有 MVC5 属性路由的自定义路由处理程序
使用库AttributeRouting,我能够配置属性路由以使用自定义路由处理程序(继承MvcRouteHandler
):
此外,在 MVC5 之前,可以更改任何现有路由的路由处理程序:
对于使用属性路由的 MVC5,路由集合包含内部类(RouteCollectionRoute
例如),并且似乎无法更改路由的RouteHandler
属性。
如何更改在 MVC5.1 中使用属性路由时使用的默认路由处理程序?
asp.net-mvc - MVC5 属性路由,为没有可选参数的路由发出 null
我在控制器上有:
[路由前缀(“”)]
带有路由的动作:
如果我在浏览器中输入这些网址,这将有效:
本地主机/待办事项
本地主机/待办事项/某事
本地主机/待办事项/某事/某事
但是这些都返回null:
这些返回正确的网址:
Url.Action("ThingsToDo", "ControllerName", new { filter1 = "something", filter2 = "something" })
Url.Action(MVC.ControllerName.ThingsToDo("something", "something"))
当我不需要可选参数时如何正确生成 url 的任何帮助将不胜感激。
c# - ASP.NET Web API 中带有可选参数的属性路由
我正在尝试使用 Web API 2 属性路由来设置自定义 API。我已经让我的路由正常工作,以便调用我的函数,但由于某种原因,我需要传入我的第一个参数以使一切正常工作。以下是我要支持的网址:
最后 3 个 URL 有效,但第一个 URL 显示“未在与请求匹配的控制器‘控制器名称’上找到任何操作。”
我的控制器如下所示:
asp.net-mvc-routing - 如何设置不使用属性路由路由的控制器方法
我在控制器级别应用了一个路由属性,但我想排除一个操作被路由。不覆盖但完全排除路线。如何做到这一点?
假设我有:
我希望内部不被路由。
我本来希望找到 [DoNotRoute] 或 [Ignore] 属性,但我没有找到类似的东西。
asp.net-mvc - 如何在 RouteCollectionRoute 中找到正确的路线?
我正在测试 ASP MVC 路由。我在 ASP MVC 5.1 中遇到属性路由问题
当我有这样的控制器时:
然后为了测试哪个路由匹配特定请求,我调用routes.GetRouteData
. 我得到一个System.Web.Routing.RouteData
包含路由以及应该说明哪个控制器和操作匹配的值。
问题是这个路由现在是RouteCollectionRoute的一个实例,
这个内部类是对这两个动作的一组路由的包装器。控制器在 中RouteData.values
,但动作不在。您可以使用routeData.Values["MS_DirectRouteMatches"] as IList<RouteData>
.
在给出的示例中,列表中将有两个路由,用于两个操作方法。我需要知道哪些包含的路由实际上是匹配的,以便我可以读取匹配路由的操作方法名称是什么。我该如何解决这条路线?
我对拥有 a 的设计选择有点困惑RouteCollectionRoute
。路由时,你有一个路由集合,然后你通过调用来解析一个 url 的路由GetRouteData
。现在你有一条路线。但如果是RouteCollectionRoute
这样,它仍然是路由的集合,并且路由解析还没有结束。拥有 RouteCollectionRoute 获得了什么?路由解析现在是一个两步过程吗?还是递归过程?
我知道我正在浏览 ASP MVC 的内部结构,但这是唯一的方法,因为它在设计时并没有考虑到这种可测试性。即使是像公开一些内部类或方法这样简单的事情也会有很大帮助!