【问题标题】:asp.net web API HTTP PUT methodasp.net web API HTTP PUT 方法
【发布时间】:2014-02-03 23:52:36
【问题描述】:

我有一些资源 - UserProfile

public UserProfile
{
   public string Email{get;set;}
   public string Password{get;set;}
}

我想分别更改电子邮件和密码(用户只能同时更改一个)。我有 web api 控制器,例如 /api/user/123 以 RESTful 样式处理请求。遵循 RESTful 风格,我应该有 one 方法 PUT 来更新资源,但我有两个任务来更新相同的资源 api/user/123。我需要向 PUT 请求正文添加一些功能,例如 {email:'test@domain.com', changeType:'email'} 或 {password:'12345678',changeType:'password' } 写一些 if in我的 PUT 方法?还是有其他方法可以以 RESTful 风格更新我的资源?

【问题讨论】:

    标签: asp.net rest asp.net-web-api restful-architecture


    【解决方案1】:
    [HttpPut]
    public HttpResponseMessage PutProduct(Product p)
    {
        Product pro = _products.Find(pr => pr.Id == p.Id);
    
        if (pro == null)
            return new HttpResponseMessage(HttpStatusCode.NotFound);
    
        pro.Id = p.Id;
        pro.Name = p.Name;
        pro.Description = p.Description;
    
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
    

    【讨论】:

    • 解释总是更好。
    【解决方案2】:

    您有两个选项分别更新电子邮件和密码。

    A) 不要使用 PUT,使用 POST

    B) 创建用于更新单个元素的子资源,例如

    PUT /api/user/123/email
    

    PUT /api/user/123/password
    

    【讨论】:

    • 谢谢,我明白 B),但我不明白 A) 如何使用一种方法 POST 分别更新电子邮件和密码?
    • 您可以通过将详细信息放在正文中来使用 POST。但是,B 更 RESTful。
    • @MikeDunker 更多 RESTful 基于 REST 的标准。创建示例 B 中的微资源可能会使缓存变得一团糟。这两种方法各有利弊。 “RESTfulness”并不是一个特别有用的衡量标准。
    猜你喜欢
    • 1970-01-01
    • 2020-05-19
    • 2017-04-24
    • 2012-12-28
    • 2012-09-03
    • 2018-03-21
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多