问题标签 [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.
c# - Web API 中 id 参数后的操作路由
在 web api 中,默认路由是:
/api/locations/123?days=5
但是,如果我希望路线看起来像这样/api/locations/123/events?days=5
,同时仍然能够LocationsController
用这样的路线击中/api/locations/123?state=md
控制器:
这里真的有两个问题:
- 有一个返回事件是否有意义,
LocationsController
或者应该有一个完全独立的控制器? - 如何
WebApiConfig
设置路线以允许这样的路线?
c# - BeginRouteForm 不适用于 API 路由?
我有一个我正在尝试使用相对简单的代码创建的表单:
我有一个 PersonsController,它是一个 ApiController,我在 WebApiConfig 中有以下路由:
但是 BeginRouteForm 调用不返回任何操作。生成的 HTML:
如您所见,该操作是空的。它不是在抱怨它找不到路线(如果它找不到它会),那么这是怎么回事?我什至尝试在 routeValues 对象中提供一个空的 id,但这也不起作用(尽管它不应该是必需的,因为 id 是可选的)。
我在这里想念什么?您不能将 BeginRouteForm 与通过 MapHttpRoute 添加的路由一起使用吗?Html.BeginRouteForm 和 Ajax.BeginRouteForm 的行为是相同的(应该是,它们具有相同的基础)。显然,在这种情况下,我希望该操作能够返回“/api/persons”。
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 操作,如下所示:
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 绑定以某种方式将其丢弃,但这没有意义,因为它适用于修改后的路由。
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.IEnumerable
1[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
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
提前致谢。
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?
asp.net-mvc - 带有 urlEncoded 部分的 WebApi 路由
我有路线:
{id} 参数可以是 URI 本身,我对其进行编码。例如,路由可以是: /rest/main/nodes/http%3A%2F%2Fwww.company.com%2Fns%2FGeo%23United_States/rdf
但是这种方式错了,它是行不通的。使用简单的 {id} 参数就可以了。
我应该怎么做才能使它起作用?
c# - 如何使用不同的参数在同一个控制器中调用不同的 GET 方法?
我有一个控制器,其中包含两种不同的 Get 方法。一个int
取值,而另一个String
取值,如下所示:
我的 RouteConfig.cs 保持不变,如下所示:
我的 WebApiConfig.cs 也没有改变,如下所示:
我希望能够通过使用单个链接来访问 Web API,例如:
我可以很好地打第一种情况,但是每当我尝试打第二种情况时,我都会收到以下错误:
有没有办法根据用户提供的是 aString
还是a 来点击 Get 方法int
?我假设需要在 RouteConfig 或 WebApiConfig 中进行更改,但我不太确定如何解决这个问题。也许这毕竟只是一个简单的解决方案?
另外,如果重要的话,我希望能够使用String
包含字母和数字的 GetInfoByString ,例如'ABC123'
or '123ABC'
。GetInfoByInt 可以类似于'123'
如果可能的话,我真的很想坚持一个控制器,而不是把它分成多个控制器。
提前感谢您的帮助。
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 在这里是完全合适的。