WebApi – REST和RPC相结合

我已经对ASP.NET Web API做了大量的研究 – 拥有一个RESTful,基于动词的方法,以及像ASP.NET MVC一样的RPC,传统方法.我想知道最好的方法是什么.到目前为止,我发现有两个有效,但我不确定最佳行动方案是什么.

合理

有一个主要资源,患者,完全适合GET,POST和PUT.
但是我也有一些场景,我有一个控制器有多个动作,没有一个真正适合基于动词的动作,并且通常有多个动作没有任何参数,我可以实现基于路径的约束(例如https://stackoverflow.com/a/14350711/1061602)对于.

方法1

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

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 }
        );

REF:https://stackoverflow.com/a/12367487/1061602

在下侧,必须为每个操作添加ActionName属性,否则它不起作用(??):

    [ActionName("RestApi")]
    public object Get(string id)
    {
        ...
    }

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

方法2

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

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 }
        );

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

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

其他方法??

??

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

最佳答案 您是否查看了Web API 2属性路由?你可以继续使用RestApi传统路线来完成你的大多数应用,而且如果你有不适合这个模型的特殊控制器,你可以用属性路径装饰那些控制器.

您可以查看以下WebAPI 2属性路由示例,该示例尝试不同的方案:

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

点赞