问题标签 [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 回答
1248 浏览

asp.net-mvc-4 - MVC4 Web-API - 需要路由映射帮助

我有一个名为的控制器

产品 和我有三个动作

  • 产品接受一个 int 返回一个模型(类)对象
  • 类别接受一个字符串返回模型(类)对象的数组
  • 全部无参数返回模型(类)对象的数组

我正在尝试的是以下映射

产品-> api/产品/产品/1

类别-> api / 产品 / 类别 / 酱汁

全部-> api/产品/全部

由于动作名称支持 URL 结构,所以我尝试了一条通用路线

其他一切正常,但是当我使用此http://localhost:2271/api/products/category/2URL时出现以下错误

另一方面,这个 URL api/products/category/?cat=abc&api/products/category?cat=abc工作正常...... [cat 是我的接收参数名称]

帮助 !!!

0 投票
1 回答
1540 浏览

c# - 是否可以使用 Web API .net 中的参数路由到操作?

是否有可能采取行动?

使 URL 看起来像“/api/Products/CategoryId/full/Name/ProductID/”

它调用该动作可能是因为属性是可选的,但属性参数始终为空。我什至尝试在请求正文中传递 Name 和 ProductID 参数,但属性仍然为空。我想使用“参数”,因为我想将 0..N 个参数传递给操作。

这是路线模板。

0 投票
5 回答
4102 浏览

asp.net-mvc - MVC 3 Web API 路由不起作用

我正在解决 MVC 3 Web API 中的路由问题。看起来应该很简单,但我没有取得任何进展。

我的错误是:

我的 RegisterRoutes 是这样的:

我的控制器是(为了便于阅读,我取出了代码):

当我尝试调用时出现错误:

TIA

0 投票
1 回答
558 浏览

c# - 在 WebApi 操作中使用 C# 关键字

我正在替换旧版 Web 服务的控制器中编写操作。问题是我需要使用 C# 关键字 (ref) 作为参数。下面的代码无法编译,因为我使用的是保留字 ref。那么如何设置 WebApi Routing 来处理这个问题呢?

例子:

谢谢

0 投票
4 回答
3563 浏览

c# - WebApi 使用 GetAll() 和 GetByIds(int[] ids) 发现多个操作

使用标准路线:

通过这些操作:

并向/api/values发出请求,我得到了这个异常:

我一直在转动我的轮子试图找到解决这个问题的方法。我相信GetAllGetByIds操作在这里被认为是Multiple,但它们不是因为 GetByIds 具有不同的签名。

是否有不涉及添加{action}到路线的解决方法?

0 投票
2 回答
269 浏览

c# - Web API 中的路由/操作损坏

我在 WebApiConfig.cs 中定义了我的默认路由:

在我的控制器中,我有一个动作:

我知道这是最近工作的,但现在我得到了臭名昭著的“在控制器'用户'上找不到与请求匹配的操作”错误。我似乎无法弄清楚(如果有的话)发生了什么变化。自从添加页面/偏移的默认值以来,我已经撤消了所有更改,但仍然没有。

有任何想法吗?

请求网址:http://localhost/api/api/Users

0 投票
2 回答
10744 浏览

rest - 组合键资源 REST 服务

我在工作中遇到了一个问题,我找不到有关在 RESTful Web 服务中针对主键是其他资源 ID 组合的资源执行 CRUD 操作的常用标准或实践的信息。我们正在使用 MVC WebApi 创建控制器。例如,我们有三个表:

  • Product: PK=产品编号
  • Part: PK=PartId
  • ProductPartAssoc: PK=(ProductId, PartId)

一个产品可以有很多部分,一个部分可以是很多产品的组成部分。关联表还包含与关联本身相关的附加信息,而不是需要可编辑的。

我们有ProductsControllerPartsController类使用定义为的路由模板处理通常的 GET/PUT/POST/DELETE 操作:{controller}/{id}/{action}这样以下 IRI 可以工作:

  • GET,POST /api/Products- 返回所有产品,创建一个新产品
  • GET,PUT,DELETE /api/Products/1- 检索/更新/删除产品 1
  • GET,POST /api/Parts- 返回所有部分,创建一个新部分
  • GET,PUT,DELETE /api/Parts/2- 检索/更新/删除第 2 部分
  • GET /api/Products/1/Parts- 获取产品 1 的所有部件
  • GET /api/Parts/2/Products- 获取第 2 部分是组件的所有产品

我遇到的问题是如何为 ProductPartAssoc 资源定义路由模板。获取关联数据的路由模板和 IRI 应该是什么样的?遵守惯例,我希望是这样的:

  • GET,POST /api/ProductPartAssoc- 返回所有关联,创建关联
  • GET,PUT,DELETE /api/ProductPartAssoc/[1,2]- 检索/更新/删除产品 1 和第 2 部分之间的关​​联

我的同事发现这在美学上令人不快,并且似乎认为完全没有ProductPartAssocController课程会更好,而是ProductsController向管理关联数据添加额外的方法:

  • GET,PUT,DELETE /api/Products/1/Parts/2- 获取产品 1 和第 2 部分之间关联的数据,而不是作为第 1 部分的成员的第 2 部分的数据,这通常是基于其他示例(例如/Book/5/Chapter/3我在其他地方看到的)的情况。
  • POST 这里不知道他们期望 IRI 是什么样子。不幸的是,他们是决策者。

归根结底,我想我正在寻找的不是验证,就是我可以指出并说“看,这就是其他人所做的”的方向。

处理由复合键标识的资源的典型做法是什么?

0 投票
1 回答
398 浏览

c# - Web api project routing trouble

I have simple web API project (ASP.NET MVC). I need to deploy my project in the subfolder on the IIS. For example, I have the site http://TestSite/ and I need to deploy the project to http://TestSite/MyProject/. When I did it, web API routing stopped to work. Because my ajax call is routed to the main site - http://TestSite/api/something/get.

I have tried to update map routing in the next way:

But it doesn't affect as I want. What I am doing wrong and where can I read about some practices of web API control routing in ASP.NET MVC?

0 投票
1 回答
6864 浏览

asp.net - Asp.net Web API:在控制器上未找到任何操作

所以这真的让我很头疼。

路线:

控制器:

但是每当我尝试点击 uri: /api/lookups/all 时,我都会收到 404 错误消息:

“在与名称‘all’匹配的控制器‘查找’上没有找到任何操作。”

任何帮助,将不胜感激

编辑:所以我终于想通了。这是因为错误的依赖。VS2012 将动作自动解析为 system.web.mvc.actionnameattribute,而我需要的是 system.web.http.actionnameattribute。

奇怪的问题,无论如何,我希望这对其他人有帮助。

0 投票
2 回答
2075 浏览

c# - 有没有办法告诉路由我的默认操作名称等于 HTTP 操作动词?

我在 MSDN 上浏览了这个文档,但无法找到答案。

考虑到我有这样定义的路线:

现在我有两个看起来像这样的控制器:

我希望能够像这样调用所有这些端点:

这将起作用,但前提是我将“Get”添加为默认操作名称。如果我没有在我的路由中指定默认操作名称,那么它会抱怨多个匹配的操作名称。如果我确实添加了默认操作名称,那么我无法在没有错误的情况下将 PUT 调用到 Put() 方法,因为操作名称与默认值不匹配并且找不到。

如果在尝试使用之前存在,我如何告诉路由使用名称与我的 HTTP 动词匹配的操作