Tag: rest

Web Api 2路由问题,URL中包含特殊字符

在开发Web Api 2 REST服务的过程中,我们发现了一个路由问题。 端点如下: …/{电子邮件}/… 问题是电子邮件可能包含特殊字符,例如“+”,这会导致找不到404资源。 我们真的希望该服务的用户能够在URL中指定电子邮件。 但由于电子邮件在法律上也可以包含“&”,因此不能将其移动到URL参数。 我们将如何解决这个问题? 关心弗雷德里克

TFS 2015 api使用PowerShell从池中删除代理

我正在努力暂时从池中删除代理,在代理所在的构建服务器上安装新软件,测试它是否有效,然后再将代理添加到池中。 我想以编程方式执行此操作,无论是使用PowerShell还是不可能,然后使用C#执行此操作。 问题是我找不到任何可以帮助我这样做的文档,无论是通过TFS rest api还是通过visual studio附带的工具。 所以我特别要问的是:如何从构建池中删除命名代理,以及如何将命名代理添加回构建池。 我基本上想要的是进入TFS的Web管理和取消选中/检查池上的代理的相同function。 编辑 – > 当我尝试使用starain-msft提供的信息启用/禁用代理时,我收到以下错误:Invoke-RestMethod:404 – 找不到文件或目录。 服务器错误 编辑 – > 删除了大部分错误,因为我发现该问题存在于我的公司代理中请阅读: https : //www.visualstudio.com/en-us/docs/integrate/get-started/rest/basics#http-method-覆盖 但是我在starain-msft的帮助下得到了它。 最终解决方案如下所示: Function TFSwebRequest{ param ( [ValidateNotNullOrEmpty()] [Parameter(Mandatory=$true)] [string] $Uri, [ValidateNotNullOrEmpty()] [Parameter(Mandatory=$true)] [string] $Method, [ValidateNotNullOrEmpty()] [string] $ContentType, [ValidateNotNullOrEmpty()] [string] $ContentBody, [ValidateNotNullOrEmpty()] [System.Net.WebHeaderCollection] $Headers ) # Creating Webrequest from Uri $webRequest = [System.Net.HttpWebRequest]::CreateHttp($Uri) $webRequest.UseDefaultCredentials […]

使用WCF生成JSON数组

我正在开发一个返回此的WCF Web服务: { “allFormsResult”: [ { “FormId”: 1, “FormName”: “Formulario 1” }, { “FormId”: 2, “FormName”: “Formulario 2” }, { “FormId”: 3, “FormName”: “Formulario 3” } ] } 这是代码: public class RestServiceImpl : IRestServiceImpl { public List allForms() { List list = null; using (var vAdmEntities = new ADMDatabase.ADMEntities()) { list = new List(); foreach […]

Whitespace的WCF JSON反序列化问题

我有一个WCF REST服务,它接受一个自定义DataContract参数作为JSON,可以是超类型或子类型。 当我传递包含额外空格的JSON时,对象总是反序列化为超类型。 当我从JSON中删除所有空格时,对象deserializaes作为子类型。 这是一个例子: [DataContract] [KnownType(typeof(SubClass))] public class SuperClass { [DataMember] public string Message { get; set; } } [DataContract] public class SubClass : SuperClass { [DataMember] public string Extra { get; set; } } [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke] void LogMessage(SuperClass arg); } public class Service1 : IService1 { public void […]

C#:System.Net.WebException:底层连接已关闭

我有以下代码: String url = // a valid url String requestXml = File.ReadAllText(filePath);//opens file , reads all text and closes it byte[] bytes = System.Text.Encoding.ASCII.GetBytes(requestXml); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Credentials = new NetworkCredential(“DEFAULT\\Admin”, “Admin”); request.ContentType = “application/xml”; request.ContentLength = bytes.Length; request.Method = “POST”; request.KeepAlive = false; Stream requestStream = request.GetRequestStream(); requestStream.Write(bytes, 0, bytes.Length); requestStream.Close(); HttpWebResponse response […]

如何在WCF Rest Service中创建JSON以匹配/序列化为DataContract

接口: namespace SQRT_WCF { [DataContract] public class PlaceOrder { [DataMember] public string claimID { get; set; } [DataMember] public string rederenceDate { get; set; } } } 调用C#方法: public SQ_jsonModel.Response placeOrder(PlaceOrder argPlaceOrderJSON) { … } 我已将我的web服务附加到工作进程,并跟踪代码。 到目前为止,我尝试过的所有内容,变量argPlaceOrderJSON都为null。 我尝试过至少三种变化: 变化#1 { “claimID” : “value”, “rederenceDate” : “value” } 变化#2: { “PlaceOrder” : { “claimID” : “value”, […]

有没有办法让OWIN托管SOAP服务?

如何让OWIN托管SOAP端点(不管是否涉及WCF,SOAP都会提供WSDL,使得某些客户端更容易使用服务,这就是我想要SOAP和REST的原因) 我怀疑答案是:实现自己的托管SOAP端点的中间件。 如果这就是答案,那就是它,但这是很多工作,所以我可能最终会坚持使用WCF并避免OWIN,如果是这样的话。 我发现很难相信没有人实现过SOAP托管中间件…… 作为一项规则,我们喜欢在我们的服务上执行REST和SOAP端点; 目前我们使用IIS和WCF restful位来使用[ServiceContract] / [OperationContract]属性来托管SOAP,其余的是使用[WebInvoke]属性定义的,使用这些属性,服务不需要为不同的端点类型重新实现。 我们只是使用ASP.NET路由添加新的ServiceRoute ,它使用与绑定到URI / SOAP的SOAP相同的服务向URI / REST添加rest绑定。 现在我们正在寻找一些新的服务工作,我想继续使用OWIN,这样我们可以通过托管不可知论来实现我们的新服务,因为一些服务将更好地服务于Windows服务托管和一些更好的服务由IIS服务托管。 所有我都在摆弄东西,到目前为止,我无法获得由OWIN托管的SOAP端点。 通过使我的服务inheritance自ApiController ,然后在OWIN应用程序的Configuration方法中使用这一小段代码,我完成了其余的处理: public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); app.UseWebApi(config); […]

带有基于rest的服务的WSDL有什么意义?

如果基于REST的Web服务就像GETing和POST到url一样简单并解析响应,那么我们需要一个wsdl吗? 重点是什么。 我理解当使用基于SOAP的服务时,它用于构造SOAP请求和响应,但是当我创建基于REST的服务时,不明白为什么visual studio为我提供了wsdl …

REST API包装器设计:将动态json作为JSON.NET JObject / JArray返回

我正在为RESTful JSON API编写一个C#包装器,并使用Json.NET将传入的json反序列化为强类型对象。 但是传入json中的一些属性是高度动态的,它将是一些具有不同数量和类型属性的json对象。 我目前的解决方案是,我将动态json属性映射到我的C#类中的Dictionary (嵌套字典),并编写Custom JsonConverter将动态json转换为嵌套字典。 我的class级看起来像这样: public class Item { [JsonProperty(“item_id”)] public int ItemId { get; set; } [JsonProperty(“type”)] public string Type { get; set; } //Property to map dynamic json object [JsonProperty(“data”)] public Dictionary Data { get; set; } } 它很成功。 问题是,很难从这个嵌套字典中为最终用户访问数据,我们甚至无法在Visual Studio中调试数据的结构。 现在我打算使用JObject或JArray而不是嵌套字典。 这样我们就可以通过调用ToString方法(将原始json数据输出为字符串)来查看数据结构,以及这些类型具有LINQ支持,以便用户可以轻松地从中访问数据。 这是一个很好的做法使用它,考虑到JObject和JArray类型都依赖于第三方库(无论如何Json.NET是我的库的依赖,因为我用它来进行json序列化)。 还是有其他方法可以做到这一点?

多个可选的查询字符串参数REST API GET

我正在使用web api 2来实现一个宁静的服务。 在对最佳实践进行一些研究之后,每个人似乎都对如何做以下事情有不同的看法。 我有一个GET public HttpResponseMessage Get(string crewId, string shiftDate, int offset = 1, int limit = 10) 此GET方法返回一个列表。 有多种方法可以从此方法获取数据。 仅限crewId 仅限shiftDate 要么 通过crewId和shiftDate获取 你(1)将crewId和shiftDate标记为可选吗? public HttpResponseMessage Get(string crewId = null, string shiftDate = null, int offset = 1, int limit = 10) 然后有一堆if语句来检查填充的内容和未填充的内容以便能够执行操作 if(crewId != null && shiftDate == null){ // Get by […]