问题标签 [asp.net-web-api-routing]
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-web-api - Asp.NET Web Api 路由
我的 WebApiConfig.cs 中有以下代码
ABC控制器.cs
当我尝试调用 API 时,它说无法在控制器中找到操作。
asp.net-web-api - ASP.NET Web API 的 DefaultHttpControllerSelector 是否在每个请求上填充其路由字典?
我正在编写一个自定义 HttpControllerSelector 来处理我的 API 中的版本控制。我查看了 github 上的 SDamann.WebApi.Versioning 库,当我运行它时,似乎路由字典正在填充每个请求。是默认的这样做还是 Sdammann 库中的设计缺陷?
如果我有很多控制器,每次请求都填充这个字典会影响性能吗?还有另一种方法可以做到这一点吗?
c# - 将字符串作为包含斜杠的 uri 参数传递或为空
我在使用 ASP.NET Web API 路由时遇到问题。具体来说,我想在 Uri 中传递一个空的或包含斜杠的字符串参数。但不幸的是,这破坏了路由。
我已经设置了正确的路由,如果我有一个普通的字符串,例如“fubar”,它匹配得很好。我试图传递编码的字符串 url,但这不起作用。显然问题是一些 http sys 层已经在解码字符串,这意味着没有"fu%2fbar"
到达,但是"fo/bar"
- 这导致了另一条路线。
另外,当我传递一个空字符串时, uri is "api//..."
,两者/
被合并,段被丢弃。
解决/
内部问题的一种方法是对 Uri 进行双重编码并在我的方法中对其进行解码。但这似乎是一个非常非常糟糕的选择,所以我正在寻找其他方法来解决这个问题。
c# - 如何修改框架的默认 Web API 路由?
如果 URL 中未提供任何操作,Web API 似乎有一个内置的默认逻辑使用 HTTP 动词作为操作名称。例如,我有这条路线:
这是我的行动:
当我使用 GET 动词转到~/Conferences时,它会将您带到“Get()”操作。如果使用 POST 动词,它会将您带到“Post([FromBody]Conference value)”动作......等等。但是,当您尝试转到 ~/Conferences/GetCurrent 时会发生冲突(即使我在顶部有 [ActionName("current")]):
找到与请求匹配的多个操作: System.Collections.Generic.IEnumerable
1[MyApp.Models.Conference] Get() on type MyApp.Api.ConferencesController System.Collections.Generic.IEnumerable
1[MyApp.Models.Conference] GetCurrent() on type MyApp.Api.ConferencesController
这意味着框架使用 StartsWith 而不是 Equal 来确定默认操作。在将动词与动作匹配时,它也会忽略 ActionName 属性。
我的问题是如何使框架的默认操作与动词完全匹配,而不是使用 StartsWith 逻辑?GET 动词应该只匹配 Get() 动作,而不是 Get()、GetCurrent() GetPast() 等(尤其是当它忽略 ActionName 属性时)。
编辑 为简单起见,我只在上面展示了我的一条路线。我认为如果我显示所有仍在草稿中的路线可能会有所帮助。我正在尝试获得一个完全正常工作的 REST API,同时仍然为添加我自己的自定义操作留出空间:
更新 似乎添加 HTTP 动词约束有助于:
asp.net - Web api 接口在本地工作,但在 Azure 上不工作
我的情况与这个问题非常相似,但由于他没有得到答案,我想我会提出更多意见。
在本地(在 VS 嵌入式服务器上)一切正常。当我部署到 Azure 时,我收到一个 404 错误,并伴有“找不到与名为...的控制器匹配的类型”。
但是,当我加载routedebugger模块时,即使在 Azure 上,映射似乎也可以。
我能做些什么来调试这个问题?
谢谢,
亚历克斯
编辑:我的路线是这样创建的:
编辑 2:这里是我的控制器类
c# - 在 Web Api 中找到多个与请求匹配的操作
当我尝试使用 2 个“获取”方法时,我不断收到此错误
找到多个与请求匹配的操作:webapi
我一直在寻找关于堆栈的其他类似问题,但我不明白。
我有 2 个不同的名称并使用“HttpGet”属性
asp.net-web-api - Web API 嵌套路由未按预期工作
我在嵌套 Web API 路由设置方面遇到了困难。
给定一个路由配置:
和控制器动作如下:
调用此路由/api/users/1528/groups
会出现此错误:
参数字典包含用于方法in
groupID
的不可为空类型的参数的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。System.Int32
AuthGroup Get(Int64, Int32)
UsersGroupsController
我期待它使用单个 long 参数来获取动作,但显然出于某种原因,它忽略了这一点并直接针对具有最多参数的那个。
根据 MS 提供的关于 Web API 如何解释路由的信息:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection我认为我是什么have 应该是正确的,但显然它并没有像它应该的那样工作。
asp.net - 如何在 ApiController 中的两个动作之间消除歧义
我在创建可以消除两个 Get 方法歧义的路由或其他配置时遇到问题。这是一个示例类:
我想myhost/api/users
映射到GetAll
,并myhost/api/users?id=123
映射到GetMany
。
现在它们都产生 500 错误,因为这两种方法都匹配为两个 URI 的可能操作。
这是我的路线:
虽然我知道在这个简单的示例中,GetMany
可以更改方法以将空 id 列表视为对所有人的请求,但在更复杂的情况下可能并非如此。
请注意,我使用的是 MVC 4 Web API,Visual Studio 2010。
c# - 阻止调用 Web API 方法
我正在使用 ASP.NET Web API 创建一个 Web API。我目前正在我的端点上删除功能,以便我可以开始针对它进行开发。
我的 WebApiConfig.cs 文件如下所示:
在我的 UsersController.cs 文件中,我有以下方法:
如何防止/Users/GetUser
成为有效路线?
使用[NonAction]
onGetUser(int id)
可以防止它完全工作。
编辑:这是当前的输出/Users/GetUser
asp.net-mvc-4 - MVC4 WebApi 路由返回 404
我开始了一个新的 Web Api MVC4 项目,但没有弄清楚我在路由器上做错了什么。我的简单 Get 请求路由返回 404。
这是我的路线定义:
我正在尝试使用 ApiDefault-CategoryLevels 路由。我安装了 Phil Haack 的路由调试器,它显示当我浏览到这个 Url 时:
我正在寻找的路线匹配:
然而,来自 IIS Web 服务器的返回是 404。
当我使用查询字符串以这种方式调用相同的 URL 时,它可以工作:
网络请求有效,我得到了我期望的结果。只有当我以第一种方式尝试请求时,它才会返回 404。
这是我的 CategoriesController 的全部内容: