添加HATEAOS链接到asp.net REST Webservice

本文关键字:net REST Webservice asp HATEAOS 链接 添加 | 更新日期: 2023-09-27 18:13:13

我正在使用ASP。Net Web API来构建RESTful服务。我正在努力寻找一个干净的方式来添加HATEAOS链接到json返回给我的客户端。

例如我有

public class LongRequest
{
   public int Id {get;set;}
   public int Progress {get;set;}
}
    public HttpResponseMessage Post(LongRequest request)
    {
        var response = Request.CreateResponse(HttpStatusCode.Accepted, request);
        string uri = Url.Link("DefaultApi", new { Id  = request.Id });
        response.Headers.Location = new Uri(uri);
        return response;
    }

我希望我返回的json中包含一个Cancel和Self链接,看起来像

{
"LongRequest":{
"Id":"32",
"Progress":"33",
"link":{
         "rel":"self",
         "href":"/LongRequest/32"
      },
"link":{
         "rel":"cancel",
         "href":"/LongRequest/32"
      },
}
}

'我现在所做的是创建一个链接类。

 public class Link
 {
    public string method { get; set; }
    public string href { get; set; }
 }

并修改为

public class LongRequest
{
    public int Id {get;set;}
    public int Progress {get;set;}
    public Link self
    {
        get{
            return new Link(){href="/Status/"+Id,method="GET"};
        }
     }
     public Link cancel
     {
        get{
            return new Link() { href = "/Status/" + Id, method = "DELETE" };
        }
     }
}

生成的json看起来像

{
   "Id":0,
   "Progress":1,
   "self":{"method":"GET","href":"/Status/0"},
   "cancel":{"method":"DELETE","href":"/Status/0"}
}

添加HATEAOS链接到asp.net REST Webservice

如果您想以标准化的方式包含链接,那么请查看一些支持超媒体的格式:

  • 梅森:https://github.com/JornWildt/Mason
  • 哈尔:https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-07
  • 塞壬:https://github.com/kevinswiber/siren
  • 收藏+ JSON: http://amundsen.com/media-types/collection/format/
  • JSON API: http://jsonapi.org/
  • 九头蛇:http://www.markus-lanthaler.com/hydra/