添加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"}
}
如果您想以标准化的方式包含链接,那么请查看一些支持超媒体的格式:
- 梅森: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/