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