【问题标题】:WebAPI Routing tableWebAPI 路由表
【发布时间】:2013-10-16 17:26:49
【问题描述】:

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 过程中说“输入”。

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

根据我的小样本,这似乎不是真的。

问题 1:
这是否意味着如果我有 10 个 API 方法(例如注册、登录、注销、发送电子邮件 ...)而不是标准默认值 get/post/put/delete ....我将需要 10 个单独的路由条目为每个一个?

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

【问题讨论】:

  • 对于问题 1:您可以使用称为别名的功能例如:([FromUri(Name = "id")] string input)...所以您仍然可以保持 TestApi 路由原样..
  • @KiranChalla 是在路由上还是在控制器上?

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2017-08-05
    相关资源
    最近更新 更多