gpt4 book ai didi

rest - WebApi - REST 和 RPC 结合

转载 作者:行者123 更新时间:2023-12-01 03:53:37 24 4
gpt4 key购买 nike

我对 ASP.NET Web API 进行了大量研究——既有基于 RESTful 的、基于动词的方法,也有像 ASP.NET MVC 这样的 RPC、传统方法。我想知道最简洁的方法是什么。到目前为止,我发现了两个可行的方法,但我不确定最佳的行动方案是什么。

基本原理

有一个主要资源 Patient,它与 GET、POST 和 PUT 完美契合。
然而,我也有一些场景,我有一个带有多个 Action 的 Controller ,没有一个真正适合基于动词的 Action ,并且通常多个 Action 没有任何我可以实现基于路由的约束的参数(例如 https://stackoverflow.com/a/14350711/1061602 )为了。

方法一

多条路线,不同的路线名称,相同的路线模板

WebApiConfig 路由:

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


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

引用: https://stackoverflow.com/a/12367487/1061602

缺点,必须为每个 Action 添加 ActionName 属性,否则它不起作用(??):
    [ActionName("RestApi")]
public object Get(string id)
{
...
}

[ActionName("RpcApi")]
public void Foo()
{
...
}

方法二

多条路线,相同的路线名称,不同的路线模板

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

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

引用: http://encosia.com/rest-vs-rpc-in-asp-net-web-api-who-cares-it-does-both/

缺点是您在客户端上有效地使用了 2 个 URL,一个用于 RESTful 操作,一个用于 RPC 操作。

其他方法??

??

有没有更优雅的方法来实现这一目标?

最佳答案

您是否研究过 Web API 2 属性路由?您可以在大多数应用程序中继续使用 RestApi 常规路由,并且无论您在何处有不适合此模型的特殊 Controller ,您都可以使用属性路由来装饰这些 Controller 。

您可以查看以下尝试不同场景的 WebAPI 2 属性路由示例:

http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/WebApiAttributeRoutingSample/Readme.txt

关于rest - WebApi - REST 和 RPC 结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19589041/

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