Web API路由到操作名称
我需要一个控制器来返回JSON以供JavaScript使用,所以我inheritance了ApiController
类,但它的行为并不像我预期的那样。 Apress书籍Pro ASP.NET MVC 4以及我发现的大多数在线示例给出了以下示例:
public class ServicesController : ApiController { public string[] MethodFruit() { return new string[] { "Apple", "Orange", "Banana" }; }
通过URL访问:
https://mysite/services/methodfruit
但这永远不会奏效 – 找不到资源。 我可以使用的唯一方法是让控制器为每个HTTP动词包含不同的方法,然后:
https://mysite/api/services
哪个调用GET方法。
我检查了Apress网站,但他们似乎没有任何论坛,目前的源代码是在VS 2012,我没有使用。 我检查了源文件,他们似乎认为前一种方法应该有效。 是不是再支持前一种方法?
是的…通常你必须遵循ASP.NET WEB API期望的默认命名约定。
查看此官方文档:
ASP.NET Web API中的路由
如果您不想遵循约定,可以尝试上面链接的doc中描述的“ 按操作名称路由”部分。
按操作名称路由
使用默认路由模板,Web API使用HTTP方法选择操作。 但是,您也可以创建一个路径,其中操作名称包含在URI中:
routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
在你的情况下,你必须这样做:
[HttpGet] public string[] MethodFruit() { return new string[] { "Apple", "Orange", "Banana" }; }
如果希望Web API在路由时查找操作名称,请将App_Start文件夹中的WebApiConfig.cs类更改为:
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
然后你可以发出GET请求
https://mysite/api/Services/MethodFruit
添加有关上述答案的其他信息。 添加RoutePrefix有时会解决问题。 希望能帮助到你
调节器
[RoutePrefix("api/Services")] public class ServicesController : ApiController { [System.Web.Http.AcceptVerbs("GET", "POST")] [System.Web.Http.HttpGet] [Route("MethodFruit")] public string[] MethodFruit() { return new string[] { "Apple", "Orange", "Banana" }; } }
在配置中
routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
我面临同样的问题,我发现我的代码
using System.Web.Mvc;
我已经使用System.Web.Http导入了Mvc intead。 所以它使用Mvc路由而不是webApi路由。 我用它代替了
using System.Web.Http
它对我有用。 我正在添加我的答案,所以新手不会重复同样的错误
上述就是C#学习教程:Web API路由到操作名称分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1269740.html