c# – WebAPI路由表

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”的名称,让我们在我的API程序上说“输入”.

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

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

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

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

最佳答案 如果将操作方法​​的id参数重命名为input,则对此操作的每次调用都必须在请求主体中传递名为input(而不是id!)的参数.

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

点赞