Tag: rest

使用WCF使用RESTful JSON API

我是WCF的新手(并且在.NET中一般都很生疏)所以有一个明显的机会这是一个已回答的问题而我错过了它。 我正在构建一个ASP.NET MVC应用程序,它将为其后端使用基于RESTful JSON的API。 我一直在研究如何在.NET中使用这种API的不同选项,看起来WCF是迄今为止最受欢迎的选择。 稍微阅读WCF我现在有一个基本的消费者类来发出请求,这是一个开始。 但现在我需要做更多的事情,而且我没有取得多大进展。 我需要使用JSON正文向API发送POST。 这是我到目前为止所拥有的: using System.ServiceModel; using System.ServiceModel.Web; using System.Runtime.Serialization; namespace APIConsumer { [ServiceContract] public interface IAPIClient { [OperationContract] [WebInvoke( Method = “POST”, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = “/session/login.json” )] string SessionLogin(string login_name); } public class APIClient : ClientBase, IAPIClient { public string SessionLogin(string […]

我应该在post或url中存储_method = PUT / DELETE

我正在使用ASP.NET MVC来构建RESTful Web应用程序,我计划通过POST隧道传递PUT和DELETE请求,因为它似乎是最实用的解决方法。 我想知道的是,我应该通过这样的url传递信息: 或者我应该通过发布的表单数据进行隧道传输,如下所示: 各自的优点和缺点是什么? 编辑:我提出这个问题的原因之一是我在某个地方读到将这样的信息放在url中是一件好事,因为post数据通常会丢失,但url会挂起(在日志文件中等) – 不幸的是它会使url看起来很难看

如何区分Json.Net中未提供的空值和值?

使用Json.net反序列化是否有一种方法可以区分空值和未提供的值,即缺少密钥? 我正在考虑使用PATCH请求进行部分对象更新,它们代表不同的意图: Null – >将此属性设置为null 缺少 – >未提供跳过属性 在javascript中,这是undefined和null之间的区别。 我现在提出的最好的方法是使用JObject 。

rest时的关系?

我想在社区中添加一个人,我不确定它是如何完成的? 我的datacontract看起来像这样: [DataContract(Name = “Community”)] public class Community { public Group() { People = new List(); } [DataMember(Name = “CommunityName”)] public string CommunityName { get; set; } public List People { get; set; } } [DataContract(Name = “Person”)] public class Person { [DataMember(Name = “PersonName”)] public string PersonName { get; set; } } 在我的服务中,我可以像这样添加一个人或社区: List […]

C#中的GetResponse()

我的便携式类库中有以下代码。 但它给出了错误 System.Net.HttpWebRequest不包含GetResponse()的定义。 public async Task GetStateByUserId(string userID) { HttpWebRequest request; Stream receiveStream; StreamReader readStream; request =(HttpWebRequest)CreateGetWebRequest(“state/uid/”+userID); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { receiveStream = response.GetResponseStream (); readStream = new StreamReader(receiveStream); string str = readStream.ReadToEnd().ToString(); s = JsonConvert.DeserializeObject(str); return s; } } 谁知道为什么会这样?

如何使用自定义标头将任意JSON数据发送到REST服务器?

TL; DR – 如何使用auth标头将JSON字符串发送到REST主机? 我已经尝试了3种不同的方法,其中一种方法适用于匿名类型。 为什么我不能使用匿名类型? 我需要设置一个名为“Group-Name”的变量,连字符不是有效的C#标识符。 背景 我需要POST JSON但是无法获取正文和内容类型 function#1 – 使用匿名类型 内容类型和数据是正确的,但我不想使用匿名类型。 我想用一个字符串 static void PostData(string restURLBase, string RESTUrl, string AuthToken, string postBody) { HttpClient client = new HttpClient(); client.BaseAddress = new Uri(restURLBase); client.DefaultRequestHeaders.Add(“Auth-Token”, AuthToken); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); // StringContent content = new StringContent(postBody); var test1 = “data1”; var test2 = “data2”; var test3 […]

自定义Json.NET合约解析器,用于将小写下划线转换为CamelCase

我正在使用ASP.NET MVC中的REST API,其中生成的序列化JSON使用lowercase_underscore作为属性。 从具有字符串属性FirstName和Surname Person类中,我得到如下JSON: { first_name: “Charlie”, surname: “Brown” } 请注意lowercase_underscore名称。 我用来为我自动执行此转换的合同解析程序是: public class JsonLowerCaseUnderscoreContractResolver : DefaultContractResolver { private Regex regex = new Regex(“(?!(^[AZ]))([AZ])”); protected override string ResolvePropertyName(string propertyName) { return regex.Replace(propertyName, “_$2”).ToLower(); } } 这一切都很好,但我不知道如何用Json.NET实现反向。 因此,例如,我可以如下声明API方法,并且它知道将请求正文中的传入JSON转换为适当的对象: public object Put(int id, [FromBody] Person person)

向ASP.NET Web API Controller添加显式操作路由

我有一个带有ApiController的ASP.NET Web API项目,它为User端点提供以下操作: GET /api/User POST /api/User DELETE /api/user 我想提供以下端点: GET /api/user/metrics 但是,当我像这样定义控制器动作时: [HttpGet] public HttpResponseMessage Metrics() { return null; } 我Multiple actions were found that match the request错误消息的Multiple actions were found that match the request 。 我理解这违反了“纯”REST API的定义,但这就是我想要的方式。 我想我必须通过映射HTTP路由来解决这个问题,但是我尝试了一些路由,但是我无法让它工作。 我的路线应该是什么样的?

修补REST API以部分更新.NET中的MongoDB

我有一个对象 { “_id”: “testobject”, “A”: “First line”, “B”: “Second line”, “C”: “Third line” } 我想向我的API发送一个REST PATCH请求,只更新其中一个属性 { “_id”: “testobject”, “C”: “Forth line” } 这会被解析成一个类 public class SomeObject { public string A { get; set; } public string B { get; set; } public string C { get; set; } } 我现在需要更新MongoDB中的现有文档,但只更新属性C 我可以为这一条记录创建一个更新定义 UpdateDefinition update = […]

ASP.NET WebApi不接收post数据

我需要使用WebApi接收一些字符串和二进制数据。 我用这种方式创建了一个控制器: [HttpPost] public void Post(byte[] buffer) { // Some code goes here } 这是溃败: routes.MapHttpRoute( name: “CuscarD95B”, routeTemplate: “D95B/{controller}”, defaults: new { buffer = RouteParameter.Optional }, constraints: new { controller = @”Cuscar” } 现在,当我尝试发布一些数据时,缓冲区总是byte [0](零长度数组)。 没有数据传递给控制器​​。 任何帮助,将不胜感激。 谢谢。