【问题标题】:Custom routing for GET/POST/DELETE does not matchGET/POST/DELETE 的自定义路由不匹配
【发布时间】:2023-03-14 18:49:01
【问题描述】:

我想要做的是在我的自定义路由中使用与默认路由模板类似的路由模板,但得到 405 - METHOD NOT ALLOWED。

第一个匹配 GET 请求@api/accounts/abc123/contacts,仅此而已。其他两个不匹配,默认路由 @api/{controller}/{id} 匹配所有四个动词。

编辑:更新路线定义

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

config.Routes.MapHttpRoute(
    name: "ContactsApi",
    routeTemplate: "api/{controller}/{id1}/contacts"
);

config.Routes.MapHttpRoute(
    name: "AddressesApi",
    routeTemplate: "api/{controller}/{id2}/addresses"
);

config.Routes.MapHttpRoute(
    name: "CoverageApi",
    routeTemplate: "api/{controller}/{id3}/coverage"
);

config.Routes.MapHttpRoute(
    name: "AccountsApi",
    routeTemplate: "api/{controller}/{id4}/accounts"
);

我正在尝试将以上路线映射到以下操作:

编辑:根据上述路由定义使用 {id1} 参数更新。

[HttpGet]
public List<Contact> GetContacts(string id)
{
    return accounts.GetContacts(id);
}

[HttpPost]
public void PostContacts(string id1, [FromBody]IEnumerable<Contact> contacts)
{
    bool success = accounts.AssignContacts(id, contacts);
}

[HttpDelete]
public void DeleteContacts(string id1, [FromBody]IEnumerable<Contact> contacts)
{
    bool success = accounts.RemoveContacts(id, contacts);
}

我只是想让我的路线保持一致......

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api2 asp.net-web-api-routing


    【解决方案1】:

    你只需要一个路由来匹配上面给出的动作:

    config.Routes.MapHttpRoute(
        name: "ApiContacts",
        routeTemplate: "api/{controller}/{id}/contacts"
    );
    

    因为你的action以相关的http动词开头,所以会调用对应的action。

    【讨论】:

    • 仅当您在动作签名中使用 {id} 以外的其他名称时才有效。否则错误是“多个操作匹配路由”..
    • 我的上述评论只有在默认路由存在(需要存在)的情况下才是正确的 - api/{controller}/{id}..
    • 我已经对此进行了测试,它对我有用。除了上面显示的之外,您在控制器上还有其他操作吗?
    • 我更新了路由定义和操作方法;这样它们就可以工作,但我不想使用 {id1}、{id2} 等命名参数。如果可能的话。而是应该只有 {id}。
    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多