问题标签 [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 投票
2 回答
5511 浏览

c# - Web API 中 id 参数后的操作路由

在 web api 中,默认路由是: /api/locations/123?days=5

但是,如果我希望路线看起来像这样/api/locations/123/events?days=5,同时仍然能够LocationsController用这样的路线击中/api/locations/123?state=md

控制器:

这里真的有两个问题:

  1. 有一个返回事件是否有意义,LocationsController或者应该有一个完全独立的控制器?
  2. 如何WebApiConfig设置路线以允许这样的路线?
0 投票
1 回答
1651 浏览

c# - BeginRouteForm 不适用于 API 路由?

我有一个我正在尝试使用相对简单的代码创建的表单:

我有一个 PersonsController,它是一个 ApiController,我在 WebApiConfig 中有以下路由:

但是 BeginRouteForm 调用不返回任何操作。生成的 HTML:

如您所见,该操作是空的。它不是在抱怨它找不到路线(如果它找不到它会),那么这是怎么回事?我什至尝试在 routeValues 对象中提供一个空的 id,但这也不起作用(尽管它不应该是必需的,因为 id 是可选的)。

我在这里想念什么?您不能将 BeginRouteForm 与通过 MapHttpRoute 添加的路由一起使用吗?Html.BeginRouteForm 和 Ajax.BeginRouteForm 的行为是相同的(应该是,它们具有相同的基础)。显然,在这种情况下,我希望该操作能够返回“/api/persons”。

0 投票
1 回答
4471 浏览

rest - 带有关联的 RESTful Web API。可能吗?

我已经使用 Web API 编写了一个 REST 服务,在阅读了 Brian Mulloy 的这个Web API 设计的部分之后,我试图弄清楚如何实现与 Web API 的关联。

Web API 设计摘录:

协会

资源几乎总是与其他资源有关系。在 WebAPI 中表达这些关系的简单方法是什么?

让我们再看看我们在名词中建模的 API 是好的,动词是坏的——与我们的狗资源交互的 API。请记住,我们有两个基本 URL:/dogs 和 dogs/1234。

我们使用 HTTP 动词来操作资源和集合。我们的狗属于主人。要获取属于特定所有者的所有狗,或为该所有者创建新狗,请执行 GET 或 POST:

获取 /owners/5678/dogs
发布 /owners/5678/dogs

现在,关系可能很复杂。主人与兽医有关系,与狗有关系,与食物有关系,等等。经常看到人们将这些链接在一起,使 URL 达到 5 或 6 级深度。请记住,一旦您拥有一个级别的主键,您通常不需要包含上述级别,因为您已经获得了您的特定对象。换句话说,你不应该需要太多比我们上面的 /resource/identifier/resource 更深的 URL 的情况。

所以我尝试为关联添加一个控制器方法,如下所示:

我还将路线模板修改为以下内容:

不幸的是,当我更新/发布事件资源时,我现在得到一个 HTTP 500 内部服务器错误,响应正文说明

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

我已经尝试修改路由模板以及添加 System.Web.Http.HttpPostAttribute (和其他 HTTP 动词),但无济于事。

有没有人试过这个并让它工作?任何帮助,将不胜感激。如果绝对不可能有多个 http 动词,那么我想我将不得不放弃与我的 REST 服务的关联。

编辑:解决方案

使用 Radim Köhler 的回答,我能够得到这个工作。将 HttpGetAttribute 添加到 Guest 方法中,如下所示:

并添加了一条附加路由来满足默认的 GET 操作,如下所示:

0 投票
1 回答
8747 浏览

routing - Web API 路由 - 在控制器上找不到与请求匹配的操作

好的 web api 路由很有趣。

我的 web api 路由配置如下。地理编码和信息路线表现出色。而且我很困惑为什么搜索不遵循套件。

所以我想要一个像http://webapi/api/v1/search/fc/rv. 这个 url 产生下面的堆栈跟踪和结果 404。我认为约定是如果你有一个带有 get 方法的控制器,它将默认使用。这似乎是第一个地理编码路线发生的情况。

现在,如果我要使用 /multiple 制作另一条更类似于第二条地理编码路线的路线来制作路线模板api/v{version}/{controller}/**for**/{featureClass}/{returnValues},那么路线就可以正常工作,一切都很愉快。

控制器签名是

我的预感是异步任务部分使用默认的 get 绑定以某种方式将其丢弃,但这没有意义,因为它适用于修改后的路由。

0 投票
1 回答
1985 浏览

asp.net - Use a viewmodel with web api action

I just read this post by Dave Ward (http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/), and I'm trying to throw together a simple web api controller that will accept a viewmodel, and something just isn't clicking for me.

I want my viewmodel to be an object with a couple DateTime properties:

Without changing anything in the stock web api project, I edit my values controller to this:

However, when I try to use this controller, I get this error:

Multiple actions were found that match the request: System.Collections.Generic.IEnumerable1[System.Single] Get() on type FEPIWebService.Controllers.ValuesController System.Collections.Generic.IEnumerable1[System.Single] Get(FEPIWebService.Models.DateRange) on type FEPIWebService.Controllers.ValuesController

This message appears when I hit

or

How can I solve the ambiguity between the first and second get actions?

For further credit, if I had this action

how could I post the Start and End properties to that object using jQuery so that modelbinding would build up the DateRange parameter?

Thanks!

Chris

0 投票
1 回答
299 浏览

asp.net-web-api - 将 JSON 字符串(多个参数)传递给 WebAPI 服务中的方法时出现异常

在尝试将 JSON 数据从脚本端传递到 WebAPI 服务内部的方法时,我们收到以下异常。

重要的提示:

在 .net 4.0 和 VS2010 中使用 WebAPI 时,我们没有遇到任何此类问题,但是当我们在 .net 4.5 和 VS2012 中使用 WebAPI 时,我们看到了这个问题。因此,请使用 4.5 框架对此进行诊断。我们在以下链接中附加了示例。如果您可以查看并发布带有评论的正确示例,那将非常有帮助,因为我们是 WebAPI 概念的新手。带有适当评论的事件发布代码片段会很好。

示例链接:http ://www.fileconvoy.com/dfl.php?id=gb197faeca5017d489993001280c7f122f64fc06a7

提前致谢。

0 投票
4 回答
5802 浏览

c# - Web API routing actions

The goal is to allow these four endpoints:

Routing entries:

These are my four function definitions in the controller:

Yet when I post an invoice using the first URI, the route that gets recognized is the attachments route. How do i have endpoints with different sections after the ID variable?

0 投票
1 回答
1283 浏览

asp.net-mvc - 带有 urlEncoded 部分的 WebApi 路由

我有路线:

{id} 参数可以是 URI 本身,我对其进行编码。例如,路由可以是: /rest/main/nodes/http%3A%2F%2Fwww.company.com%2Fns%2FGeo%23United_States/rdf

但是这种方式错了,它是行不通的。使用简单的 {id} 参数就可以了。

我应该怎么做才能使它起作用?

0 投票
4 回答
1986 浏览

c# - 如何使用不同的参数在同一个控制器中调用不同的 GET 方法?

我有一个控制器,其中包含两种不同的 Get 方法。一个int取值,而另一个String取值,如下所示:

我的 RouteConfig.cs 保持不变,如下所示:

我的 WebApiConfig.cs 也没有改变,如下所示:

我希望能够通过使用单个链接来访问 Web API,例如:

我可以很好地打第一种情况,但是每当我尝试打第二种情况时,我都会收到以下错误:

有没有办法根据用户提供的是 aString还是a 来点击 Get 方法int?我假设需要在 RouteConfig 或 WebApiConfig 中进行更改,但我不太确定如何解决这个问题。也许这毕竟只是一个简单的解决方案?

另外,如果重要的话,我希望能够使用String包含字母和数字的 GetInfoByString ,例如'ABC123'or '123ABC'。GetInfoByInt 可以类似于'123'

如果可能的话,我真的很想坚持一个控制器,而不是把它分成多个控制器。

提前感谢您的帮助。

0 投票
1 回答
589 浏览

asp.net-mvc-4 - 如何从 ASP.NET 的 GetUrlHelper() 返回相对 URL?

在 ASP.NET MVC 4 网站中,我使用 Web API 返回 JSON 格式的资源,包括授权操作的链接(例如,DELETE)。要创建这些链接,我在 HttpRequestMessage 上使用 GetUrlHelper() 扩展方法...

我担心的是,从 Link() 返回的字符串是一个完全限定的 URL(它包括https://example.com/...),而我认为我需要的只是相对 URL(只是/my/resource)。目前,我遇到了一个服务器问题,我们的生产环境在应该是 https 时添加了 http,这不起作用。我可以单独解决这个问题,但它提出了一个问题,我应该只提供一个相对 URL 吗?如果是这样,有没有比剪掉 UrlHelper.Link() 生成的 URL 的根部分更好的方法来获取相对 URL?

编辑:在咨询了 Richardson 和 Ruby 的优秀RESTful Web Services之后,我更加坚信相对 URL 在这里是完全合适的。