Web API路由表

时间:2013-10-16 17:26:50

标签: c# asp.net-web-api asp.net-mvc-routing

WebAPIConfig

config.Routes.MapHttpRoute(
     name: "TestApi",
     routeTemplate: "api/{controller}/{action}/{id}",
     defaults: new { id = RouteParameter.Optional }
);

我的APIController:

public class TestController : ApiController
{
    [HttpPost]
    public string Send([FromBody] string id)
    {
        return "Got " + id;
    }
}

这一切都运行良好,直到更改 PARAM “ID”的 NAME ,让我们在API程序中说“输入”。

MY(错误)假设
我的印象是,通过在路由表url上放置{xx}括号,我们确实声明将从请求调用中使用任何第一个参数。

根据我的小样本,这似乎不正确。

问题1:
这是否意味着,如果我有10个API方法(如寄存器,登录,注销,sendemail ...)而不是标准默认值get / post / put / delete ....我将需要10个单独的路由条目一个?

问题2:
另外,我们如何在路由表上表示期望一类POCO字段的API? 我们是否在MapHttpRoute上声明每个人和单独的字段名称?

1 个答案:

答案 0 :(得分:2)

如果您将操作方法​​的id参数重命名为input,则每次调用此操作都必须传递一个名为input的参数(不是id!)请求正文。

由于参数绑定基于匹配名称,因此您无法在不更新调用客户端的情况下重命名正文参数(如果可能的话)。但是,当您更新路径定义和相应的操作方法参数时,可以重命名路径参数占位符。