C# 指定如何在REST服务中传递参数

C# 指定如何在REST服务中传递参数,c#,rest,C#,Rest,我计划使用C#创建一个REST服务,但对如何构造它有点困惑 在这个基本示例中,有一个方法应该写入TimeSeries数据。根据我所做的研究,我希望URL类似:{id} 例如: {[“20180101”、“10”][“20180102”、“20”} 在本例中,TimeSeries ID为1,JSON(可能不是正确的JSON,但举例说明)表示要写入的数据点 因此,要写入的时间序列的ID在URI中。要写入的实际数据将在请求体中(作为JSON发布) 以下是我目前掌握的情况: [ServiceContra

我计划使用C#创建一个REST服务,但对如何构造它有点困惑

在这个基本示例中,有一个方法应该写入TimeSeries数据。根据我所做的研究,我希望URL类似:{id}

例如: {[“20180101”、“10”][“20180102”、“20”}

在本例中,TimeSeries ID为1,JSON(可能不是正确的JSON,但举例说明)表示要写入的数据点

因此,要写入的时间序列的ID在URI中。要写入的实际数据将在请求体中(作为JSON发布)

以下是我目前掌握的情况:

[ServiceContract]
public interface ITimeSeriesService
{
    [OperationContract]
    [WebInvoke(Method = "PUT", UriTemplate = "timeseries", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    string WriteTimeSeries(int id, string datapoints);

}
因此,我的问题是:

  • 如何如上所述将该方法绑定到URI
  • 如何指定参数“id”在URI中,而“datapoints”在主体中
我正在使用.NET4.5.2


感谢您的帮助。

JSON只是一个字符串,表示在面向对象语言中,类及其属性和字段

例如,在C#中,您可能有一个类,如:

Animal
{
   public string Breed {get; set:}
   public int Age {get; set;}
}
将动物传递给(假设为Web API)控制器方法的JSON如下所示:

{"Animal":{"Breed":"Bull Dog", "Age":"5"}}
在使用默认路由(
{controller}/{action}
)的WebAPI控制器中,您的方法如下所示:

public string AddDog([FromBody]Animal animal)
{
   // do stuff with animal
}
 http://myApp:4000/Animal/Add
最有可能的情况是,我希望在请求体中使用带有JSON的POST方法。WebAPI/MVC将尝试根据与请求最匹配的内容来路由方法

URL/查询将类似于:

public string AddDog([FromBody]Animal animal)
{
   // do stuff with animal
}
 http://myApp:4000/Animal/Add
当然,如果您正在构建此应用程序以与另一个.NET应用程序一起使用,则只需使用HttpClient即可。该代码看起来很像:

// .net core 2 with extensions
var Client = new HttpClient();
var message = client.PostAsJsonAsync("http://myApp:4000/Animal/Add", myAnimalObject).GetAwaiter().GetResult();

你想在那个网址上放一个字吗?请注意,在URL内传递JSONDo不是最佳做法,您特别想使用
WebInvoke
?你会考虑WebAPI或者ASP.NET MVC吗?@ Cavave3我选择了基于这里的建议:@ MjWiels:诚实的答案-我不知道!唯一的要求是,它应该可以从非.Net应用程序(例如Python或Excel)中使用@GinjaNinja首先,它是一个HTTP上的REST服务,它可以用于任何可以执行HTTP请求的应用程序(我认为Excel不能执行HTTP)。然后,我建议您使用一种更好的语言来构建像Nodejs这样的web服务。最重要的是,我认为您必须接受一个请求,这样json就不会出现在URL字段中,而是出现在body字段中。你知道什么是HTTP请求吗?POST通常是创建一个对象并进行更新。这是英国的一项惯例way@Thecave3是的,我假设使用“添加”方法可以清楚地看到,除非你是为了绝对清晰和后代?是的,这是为了清晰,而且他似乎想更新某些内容(参见问题注释)。无论如何,最好是specify@AustinTFrench:谢谢你的回答。你为什么建议使用WebAPI而不是REST?另外,在URI中添加插件是否不违反约定?WebAPI是实现RESTful服务的.net实现。作为一名.NET开发人员,您可以使用相当标准的C#/.NET框架和概念,但对于消费者来说,它的行为与任何REST服务都一样。