4

我对 ASP.NET Web API 做了很多研究——有一个 RESTful、基于动词的方法以及一个 RPC、传统的方法,比如在 ASP.NET MVC 上。我想知道最整洁的方法是什么。到目前为止,我已经找到了两个可行的方法,但我不确定最好的做法是什么。

基本原理

有一个主要资源Patient与 GET、POST 和 PUT 完美匹配。但是,我也有一些场景,其中我有一个具有多个动作的控制器,没有一个真正适合基于动词的动作,并且通常多个动作没有任何参数,我可以实现基于路由的约束(例如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

缺点,必须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 操作。

其他方法??

??

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

4

1 回答 1

2

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

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

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

于 2013-10-25T12:00:14.383 回答