【发布时间】:2015-10-13 21:58:01
【问题描述】:
我正在努力使路由前缀正常工作,或者可能对 ASP.NET Web API 中的路由有误解
这是我的代码:
public class TestController : ApiController
{
// GET: api/Test
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Test/5
public string Get(int id)
{
return "value";
}
[HttpGet]
[Route("GetValue")]
public string GetValue(int id)
{
return "best";
}
[HttpGet]
[Route("GetValue1")]
public string GetValue1(int test)
{
return "GetValue";
}
}
这是每次通话的状态
-
localhost:52154/api/test/Getvalue1/1(HTTP 错误 404.0 - 未找到) -
localhost:52154/api/test/Getvalue1?test=1( 找不到网页) -
localhost:52154/api/test/Getvalue?id=1(作品返回“值”但不调用GetValue方法) -
localhost:52154/api/test/1(作品返回“价值”) -
localhost:52154/api/test/(作品返回 "value1","value2")
请告诉我如何使 GetValue1 和 GetValue 路由正常工作。我确实将 ASP.NET 的 NuGet 包更新为 Web Api 2.2
WebApiConfig 看起来像这样
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
【问题讨论】:
-
如果您在那里进行了更改,能否向我们展示您的 WebApiConfig?
-
我认为在你的路线名称中使用“Get”是行不通的,因为它是一个已经被翻译的特殊术语。试试
[Route("RetriveValue")] -
您的 web api 路由似乎配置不正确。使用默认路由,所有 get 请求都将映射到 Get 方法、Posts to Post 方法等。很可能您的 WebApiConfig.cs 有一行包含
routeTemplate: "api/{controller}/{id}",您应该将其更改为routeTemplate: "api/{controller}/{action}/{id}"以映射操作。你的[Route]属性不需要这样做。 -
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
-
在上面看到我的消息
标签: asp.net-mvc asp.net-web-api