C# RESTful设计是否更喜欢[FromBody]标记?

C# RESTful设计是否更喜欢[FromBody]标记?,c#,.net,asp.net-mvc,visual-studio,rest,C#,.net,Asp.net Mvc,Visual Studio,Rest,RESTful设计更喜欢URL中的数据还是[FromBody]中的数据? 假设我有一个控制器方法: [Route("ServiceActivity({serviceActivityGuid:guid})/State({serviceAppointmentState:int})/Status({statusCode:int})", Name = "ServiceActivityStateStatusPut")] [HttpPut] [NotNull] public ServiceAppointme

RESTful设计更喜欢URL中的数据还是[FromBody]中的数据?

假设我有一个控制器方法:

[Route("ServiceActivity({serviceActivityGuid:guid})/State({serviceAppointmentState:int})/Status({statusCode:int})", Name = "ServiceActivityStateStatusPut")]
[HttpPut]
[NotNull]
public ServiceAppointment ServiceActivityStateStatusPut(int serviceAppointmentState, int statusCode, Guid serviceActivityGuid)
{
    return this.serviceActivityService.UpdateShowTimeAs(serviceAppointmentState, statusCode, serviceActivityGuid);
}
这样做会更好吗

    [Route("ServiceActivity({serviceActivityGuid:guid})", Name = "ServiceActivityStateStatusPut")]
    [HttpPut]
    [NotNull]
    public ServiceAppointment ServiceActivityStateStatusPut([FromBody] myObject)
    {
        return this.serviceActivityService.UpdateShowTimeAs(myObject);
    }
此操作的行为应该是当客户端导航到:

../ServiceActivity({serviceActivityGuid:guid})/State({serviceAppointmentState:int})/Status({statusCode:int})
具体而言:

../ServiceActivity(BF6ACF8D-8967-4D2B-BF53-E112D15A609B)/状态(1)/状态(0)

然后,对于主键为BF6ACF8D-8967-4D2B-BF53-E112D15A609B的记录,应将状态设置为1,将状态设置为0

RESTful设计更喜欢URL中的数据还是[FromBody]?都是关于资源的。其背后的思想是,您的访问点应该与特定的资源相关联

在开始之前,我知道REST和HTTP不需要一起工作,所以RESTsul服务不需要使用HTTP,HTTP也不需要是RESTful的

在您的示例中,我想说,我个人更喜欢
[FromBody]
,因为您可以重新设计URL方案,使其更加RESTful。REST本身并不喜欢
[FromBody]
,因为这是
ASP.NET

例如,上面示例中的资源似乎是一个
ServiceActivity
,因此为
PUT
方法使用类似
/ServiceActivity/{serviceActivityGuid:guid}
的URL可能更有意义。实际的例行程序看起来像你的第二个

如果您的第一个示例是一个
GET
,那么我会说它更接近REST所喜欢的,但是因为它是一个
PUT
,我认为它没有多大意义。我将第一个示例解释为,我们将更新服务活动状态的状态。所以,虽然你的第一个答案本身并不一定是“错误的”,但它让我错误地理解了什么资源实际上受到了影响

顺便说一句,我还要看看你的URL格式。在我看来,使用
资源({id})
格式似乎不符合REST与HTTP的常规做法。我将研究类似于
/Resource/{id}/Subresource/{id}
等的格式

如果您有一个要求您查询状态和状态的
GET
,我将执行类似
/ServiceActivity?state=1&status=0的操作来返回状态为1和状态为0的所有活动

可以找到一些关于REST的好资源,并且

希望这有帮助:)

在REST和HTTP上编辑另一个不完全符合您的要求,但似乎是一个很好的资源