gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 4 - API 路由 - 在 URL 中指定操作

转载 作者:行者123 更新时间:2023-12-04 20:01:08 24 4
gpt4 key购买 nike

我有一个用 ASP.NET MVC 4 框架编写的 Web 服务。它的基本 CRUD 操作可以很好地映射到 REST 动词,但我有一个 Action 需要添加,但它没有。

指定有时在 URL 末尾传递 ID 的能力的正确方法是什么? ID?在正确的路由器映射方面需要帮助。

想法?注意:我更关心 WebAPI 而不是 100% REST。

示例网址
//获取小部件列表
http://somedomain.com/api/widget
//获取特定的小部件
http://somedomain.com/api/widget/1
//POST - 对特定小部件采取特殊操作 - 提升
http://somedomain.com/api/widget/promote/1

这是处理它的正确方法吗?

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

routes.MapHttpRoute(
name: "DefaultApiExtended",
routeTemplate: "api/{controller}/{action}/{id}"
);

最佳答案

我会尝试将第二个模式 (“action”,一个 String 类型,后跟一个斜线和一个 int ID) 放在比 更高的优先级(在您知道 URL 的末尾将是整数类型)

routes.MapHttpRoute(
name: "ActionWithId",
routeTemplate: "api/widget/{action}/{id}"
);

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

您的操作和您的 ID 不是可选的,因为您一直期望它们。如果没有匹配项,则 DefaultApi 规则应接管处理。

编辑:

只是想,如果您确实希望它是“RESTy”,那么您可以随时切换 ID,因此对于这个具有此 ID 的小部件,执行此操作。

routes.MapHttpRoute(
name: "ActionWithId",
routeTemplate: "api/widget/{id}/{action}"
);

关于asp.net-mvc - ASP.NET MVC 4 - API 路由 - 在 URL 中指定操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com