将HATEAOS链接添加到ASP .NET REST Webservice

时间:2015-09-18 09:25:14

标签: c# asp.net rest

我正在使用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在json中包含一个看起来像

的取消和自我链接

{
"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; }
 }

并将LongRequest修改为

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"}
}

1 个答案:

答案 0 :(得分:0)

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