问题标签 [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.

0 投票
1 回答
269 浏览

asp.net-web-api - Asp.NET Web Api 路由

我的 WebApiConfig.cs 中有以下代码

ABC控制器.cs

当我尝试调用 API 时,它说无法在控制器中找到操作。

0 投票
1 回答
459 浏览

asp.net-web-api - ASP.NET Web API 的 DefaultHttpControllerSelector 是否在每个请求上填充其路由字典?

我正在编写一个自定义 HttpControllerSelector 来处理我的 API 中的版本控制。我查看了 github 上的 SDamann.WebApi.Versioning 库,当我运行它时,似乎路由字典正在填充每个请求。是默认的这样做还是 Sdammann 库中的设计缺陷?

如果我有很多控制器,每次请求都填充这个字典会影响性能吗?还有另一种方法可以做到这一点吗?

0 投票
2 回答
3888 浏览

c# - 将字符串作为包含斜杠的 uri 参数传递或为空

我在使用 ASP.NET Web API 路由时遇到问题。具体来说,我想在 Uri 中传递一个空的或包含斜杠的字符串参数。但不幸的是,这破坏了路由。

我已经设置了正确的路由,如果我有一个普通的字符串,例如“fubar”,它匹配得很好。我试图传递编码的字符串 url,但这不起作用。显然问题是一些 http sys 层已经在解码字符串,这意味着没有"fu%2fbar"到达,但是"fo/bar"- 这导致了另一条路线。

另外,当我传递一个空字符串时, uri is "api//...",两者/被合并,段被丢弃。

解决/内部问题的一种方法是对 Uri 进行双重编码并在我的方法中对其进行解码。但这似乎是一个非常非常糟糕的选择,所以我正在寻找其他方法来解决这个问题。

0 投票
1 回答
6428 浏览

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.IEnumerable1[MyApp.Models.Conference] GetCurrent() on type MyApp.Api.ConferencesController

这意味着框架使用 StartsWith 而不是 Equal 来确定默认操作。在将动词与动作匹配时,它也会忽略 ActionName 属性。

我的问题是如何使框架的默认操作与动词完全匹配,而不是使用 StartsWith 逻辑?GET 动词应该只匹配 Get() 动作,而不是 Get()、GetCurrent() GetPast() 等(尤其是当它忽略 ActionName 属性时)。

编辑 为简单起见,我只在上面展示了我的一条路线。我认为如果我显示所有仍在草稿中的路线可能会有所帮助。我正在尝试获得一个完全正常工作的 REST API,同时仍然为添加我自己的自定义操作留出空间:

更新 似乎添加 HTTP 动词约束有助于:

0 投票
1 回答
2601 浏览

asp.net - Web api 接口在本地工作,但在 Azure 上不工作

我的情况与这个问题非常相似,但由于他没有得到答案,我想我会提出更多意见。

在本地(在 VS 嵌入式服务器上)一切正常。当我部署到 Azure 时,我收到一个 404 错误,并伴有“找不到与名为...的控制器匹配的类型”。

但是,当我加载routedebugger模块时,即使在 Azure 上,映射似乎也可以。

我能做些什么来调试这个问题?

谢谢,

亚历克斯

编辑:我的路线是这样创建的:

编辑 2:这里是我的控制器类

0 投票
18 回答
219241 浏览

c# - 在 Web Api 中找到多个与请求匹配的操作

当我尝试使用 2 个“获取”方法时,我不断收到此错误

找到多个与请求匹配的操作:webapi

我一直在寻找关于堆栈的其他类似问题,但我不明白。

我有 2 个不同的名称并使用“HttpGet”属性

0 投票
1 回答
764 浏览

asp.net-web-api - Web API 嵌套路由未按预期工作

我在嵌套 Web API 路由设置方面遇到了困难。

给定一个路由配置:

和控制器动作如下:

调用此路由/api/users/1528/groups会出现此错误:

参数字典包含用于方法ingroupID的不可为空类型的参数的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。System.Int32AuthGroup 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 应该是正确的,但显然它并没有像它应该的那样工作。

0 投票
1 回答
195 浏览

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。

0 投票
5 回答
3608 浏览

c# - 阻止调用 Web API 方法

我正在使用 ASP.NET Web API 创建一个 Web API。我目前正在我的端点上删除功能,以便我可以开始针对它进行开发。

我的 WebApiConfig.cs 文件如下所示:

在我的 UsersController.cs 文件中,我有以下方法:

如何防止/Users/GetUser成为有效路线?

使用[NonAction]onGetUser(int id)可以防止它完全工作。

编辑:这是当前的输出/Users/GetUser

0 投票
1 回答
1381 浏览

asp.net-mvc-4 - MVC4 WebApi 路由返回 404

我开始了一个新的 Web Api MVC4 项目,但没有弄清楚我在路由器上做错了什么。我的简单 Get 请求路由返回 404。

这是我的路线定义:

我正在尝试使用 ApiDefault-CategoryLevels 路由。我安装了 Phil Haack 的路由调试器,它显示当我浏览到这个 Url 时:

我正在寻找的路线匹配:

然而,来自 IIS Web 服务器的返回是 404。

当我使用查询字符串以这种方式调用相同的 URL 时,它可以工作:

网络请求有效,我得到了我期望的结果。只有当我以第一种方式尝试请求时,它才会返回 404。

这是我的 CategoriesController 的全部内容: