Dav*_*ave 18 c# asp.net-web-api asp.net-web-api-routing
我需要一个控制器来返回JSON以供JavaScript使用,所以我继承了ApiController类,但它的行为并不像我预期的那样.Apress书籍Pro ASP.NET MVC 4以及我发现的大多数在线示例给出了以下示例:
public class ServicesController : ApiController
{
public string[] MethodFruit()
{
return new string[] { "Apple", "Orange", "Banana" };
}
Run Code Online (Sandbox Code Playgroud)
通过URL访问:
http://mysite/services/methodfruit
Run Code Online (Sandbox Code Playgroud)
但这永远不会奏效 - 找不到资源.我可以使用的唯一方法是让控制器为每个HTTP动词包含不同的方法,然后:
http://mysite/api/services
Run Code Online (Sandbox Code Playgroud)
哪个调用GET方法.
我检查了Apress网站,但他们似乎没有任何论坛,目前的源代码是在VS 2012,我没有使用.我检查了源文件,他们似乎认为前一种方法应该有效.前一种方法是否不再受支持?
Len*_*rri 32
是的...通常你必须遵循ASP.NET WEB API期望的默认命名约定.
查看此官方文档:
如果您不想遵循约定,可以尝试上面链接的doc中描述的" 按操作名称路由"部分.
按操作名称路由
使用默认路由模板,Web API使用HTTP方法选择操作.但是,您也可以创建一个路径,其中操作名称包含在URI中:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你必须这样做:
[HttpGet]
public string[] MethodFruit()
{
return new string[] { "Apple", "Orange", "Banana" };
}
Run Code Online (Sandbox Code Playgroud)
如果希望Web API在路由时查找操作名称,请将App_Start文件夹中的WebApiConfig.cs类更改为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
然后你可以发出GET请求
http://mysite/api/Services/MethodFruit
Run Code Online (Sandbox Code Playgroud)
添加有关上述答案的其他信息.添加RoutePrefix有时会解决问题.希望它能帮助
Controller
[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" };
}
}
Run Code Online (Sandbox Code Playgroud)
在配置中
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57391 次 |
| 最近记录: |