如何让MVC4 Web API支持HTTP动词和“动作”?方法
本文关键字:动作 方法 HTTP MVC4 Web 支持 API | 更新日期: 2023-09-27 18:10:46
如何设置路由以支持此功能?
- GET/api/values/works
- GET/api/values/1 works
- POST/api/values works
- PUT/api/values works DELETE/api/values works
- GET/api/values/GetSomeStuff/1 不工作!
如果我切换路由,那么GetSomeStuff工作,但/api/values不工作。我如何配置路由使它们都工作?
示例方法:
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
// GET api/values/5
[HttpGet]
public string GetSomeStuff(int id)
{
return "stuff";
}
路由设置如下:
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您可以尝试以下路径:
config.Routes.MapHttpRoute(
name: "DefaultController",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]*$" }
);
config.Routes.MapHttpRoute(
name: "DefaultController2",
routeTemplate: "api/{controller}/{action}/{id2}"
);
,并将你的动作方法改为:
[HttpGet]
public string GetSomeStuff(int id2)
{
return "stuff";
}
不如改成:
GET /api/values/GetSomeStuff/1
你的url是这样设计的:
GET /api/someStuff/1
现在你可以简单地在它上面有一个SomeStuffController
和一个Get(int id)
动作