如果您不使用
Route attribute
若要指定/覆盖方法名称,并且您没有在路由中指定默认方法名称,则Web API将使用默认动作谓词
Get
,
Post
,
Put
,
Delete
作为方法名称。这意味着您必须更改方法,如下所示:
只查看方法名称的更改,不要注意返回类型,这是我对示例代码的另一个不满。您应该让Web API框架使用配置的序列化程序,而不是返回字符串,而是返回
IHttpActionResult
默认情况下。“为什么”和“如何”超出了这个问题的范围,但我不会在方法签名上留下字符串作为返回类型,从而使错误的做法永久化。
public class CategoriesController : ApiController
{
[HttpGet]
public IHttpActionResult Get()
// or to pass in an an int and return only 1 category
[HttpGet]
public IHttpActionResult Get(int id)
现在允许您像这样调用api
-
/Api/Categories/
-
或
/Api/Categories/128
用第二种方法
如果要使用除4(get/put/post/delete)之外的方法名,则可以在
WebApiConfig.cs
或使用
路由属性
.
对于WebApiConfig。cs only change您可以这样做:
config.Routes.MapHttpRoute(
name: "Get",
routeTemplate: "api/{controller}/{action}/{id}"
defaults: new { id = RouteParameter.Optional }
);
现在允许您像这样调用api
-
/Api/Categories/GetCategories/
-
/Api/Categories/GetCategory/1234
如果您想使用
路由属性
你可以这样做:
[RoutePrefix("api/categories"]
public class CategoriesController : ApiController
{
[HttpGet]
[Route("")]
public IHttpActionResult GetCategories()
[HttpGet]
[Route("{id:int}")]
public IHttpActionResult GetCategory(int id)
现在允许您像这样调用api
-
/Api/类别/
-
或
/Api/类别/128
用第二种方法
编辑
根据下面的评论。。。
另请参见
HTTP 404 Page Not Found in Web Api hosted in IIS 7.5
.加入
UrlRoutingModule
到
web.config
修复了该问题,因为它是由该和路由配置引起的。。