我正在使用Soapclient获取一些数据.我从其中一个电话中获得了重新调整: stdClass Object ( [payTransIncome] => stdClass Object ( [item] => stdClass Object ( [payTransId] => 141281 [payTransItId] => 630260 [payTransBuyerId] => 1311 ) ) ) 但是,此Webapi的文档说payTransIncome是一个数组. 在我看来,肥皂发现了一个元素数组,并将其转换为单个stdclass对象.这使得很难解析,因为有时我认为它实际上可能返回更多的1个元素. 确保我可以在任何地方
以下是关于 asp.net-web-api 的编程技术问答
我有一个Azure Web应用程序,当我在控制器上调用操作时,我想用它来筛选网站,例如. var driver = new PhantomJSDriver(); driver.Url = "http://url.com"; driver.Navigate(); var source = driver.PageSource; var pathElement = driver.FindElementByXPath("//table[@class='someclassname']"); string innerHtml = ""; IJavaScriptExecutor js = driver as IJavaScriptExecutor; if (js != null) { innerHtml = (string)js.ExecuteScript("return arguments[0].innerHTML;", pathElement); } return innerHtm
我们了解如何使用WebAPI在ASP.NET身份中实现身份验证和授权. 例如,我们可以记录用户,然后检索他的安全令牌和角色. 我们现在想添加权限.例如,用户 steve 可以在 admin 角色中.现在,我们要为管理员角色分配读取,编辑和删除权限.我们如何在ASP.NET身份中做到这一点? ASP.NET身份中是否存在现有的权限基础架构? 解决方案 我扩展了ASP.NET身份以允许您描述的权限.我这样做是为了将安全模型与您的应用程序模型解除.在授权工作中扮演角色的传统方法的问题是,您必须在设计应用程序时同时设计安全模型,如果您进行了任何更改,则必须重新编译并重新启动应用程序.通过这种方法,我提出了您在自定义授权筹码中定义资源和操作,在该授权策略中,操作类似于权限.现在您装饰这样的方法: [SimpleAuthorize(Resource = "UserProfile", Operation = "modify")] public ActionResult Modify
首先,我是新手测试. 我想在Web API [大约70]上执行负载测试.我正在使用带负载测试功能的VS2015企业,但我不知道如何使用. 我要执行的步骤是: 1) Response time of the service when running a single request. 2) Memory consumption used by the service when running a single request. 3) Maximum number of concurrent requests supported by the service 4) Memory consumption used by the service when running the maximum number of concurrent requests. 5) Response time of the service when running the maximum numb
我有一个自定义的模型燃烧器,当我加载测试我的应用程序并运行蚂蚁profiler时,它识别为读取该请求.符合字符串为热点: public class QueryModelBinder : IModelBinder { public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { var body = actionContext.Request.Content.ReadAsStringAsync().Result; 是否有更有效的方法可以做到这一点? 还是我错误地阅读了蚂蚁的剖面? 解决方案 内容有多大?请注意,您可能会看到很多时间,因为您正在以同步而不是异步调用此网络调用. 您可以可能读取较早的async并将其存放在请求属性中. 或者,您可以代替编写格式化器,然后用[来自B
我正在阅读有关http缓存的Google Performance文档,请 https://developers.google.com/web/fundamentals/performance/optimizing-content-felcipication/http-caching ,本文档说我们应该在可能的情况下使用ETAG.我正在使用ASP.NET Web API 2.2.我现在正在尝试在所有公共API中实施ETAG.我正在考虑使用MD5实现ETAG.我的意思是,我将使用MD5对每个请求进行JSON响应.在每个请求上使用MD5.CalculateHash是否有任何性能打击?我的JSON响应尺寸不太大(在1至20KB的范围内). 解决方案 是的,会有性能命中.计算哈希需要时间.但是,您可能会发现,与通过将电线上的不变字节传输到客户端的性能相比,哈希的计算成本并不重要. . 但是,不能保证您会通过ETAG进行绩效.这取决于许多事情.您是否要根据每个请求将服务器上的ETAG
我已经创建了一个WebAPI SQL接口,以便开发用户可以通过RESTFUL接口动态查询数据库.这是小问题的速度,但是当较大的查询发挥作用时,会出现严重的滞后问题,尤其是在进行多个同时调用时.我对此进行了性能分析,并且绝大多数处理都在线上完成: var xe = reader.ReadOuterXml(); 客户端期望XML文本字符串,因此我尝试仅执行ExecuteReader,但是随后在2033年的字节块中返回结果,这似乎很慢,这很不幸,因为在SQL Server Management Studio中运行此查询(使用" for xml auto")几乎是即时的. 我正在使用16MB XML响应进行测试,但它们的响应超过150MB -200MB. 如何优化它以更好地处理这些大型响应?代码如下: public XElement AdHockSelect([FromBody] XElement valueElement, string connectionStri
我在WCF和缓慢的启动时间遇到问题,因此我将所有代码切换到使用WebAPI.虽然启动时间大大减少(〜8-15秒降至〜2),但我在启动时仍然有一个奇怪的延迟.目前大约约2秒,但随后的电话一直低于0.5秒,直到超时为止. 我查看了所有应用程序池设置,以确保没有任何启动延迟或无聊的超时设置. 我找到了此链接非常慢的首次呼叫Web Service 这对我没有帮助 - 在冷启动时,我仍然会遇到相同的速度问题.还发现这是一个每天第一次致电Web服务很慢./a>再次不适用于我. 我启用了在我的WebAPI服务上进行跟踪,发现我的第一个和第二个通话之间的唯一区别是显示WebHostHttpControllerTypeResolver.GetControllerTypes的两行.我似乎找不到太多的信息,但这是我看到的唯一区别. 我还可以使用其他类型的记录来确定实际发生的事情吗? 解决方案 这是我在问题下对话的摘要 超时永远都不相同,但是相同的球场...为了扩展,我发布
我正在使用ActionFilter记录我的ASP.NET Web API项目的所有操作调用. OnActionExecected方法告诉了很多发生的事情. 我只是不知道如何找到一种有效的方法来测量执行时间... 解决方案 类似的事情应该做技巧... public class StopwatchAttribute : ActionFilterAttribute { private const string StopwatchKey = "StopwatchFilter.Value"; public override void OnActionExecuting(HttpActionContext actionContext) { base.OnActionExecuting(actionContext); actionContext.Request.Properties[StopwatchKey] = Stop
我在集成测试项目之一中使用Microsoft.Owin.Hosting来自我托管API,以测试最终功能. [TestMethod] public void GetLoanApplications() { using (WebApp.Start(url: url)) { using (var client = new HttpClient()) { // Create httpclient and send request-and-response-metadata-in-aspnet-web-api } } } 我能够自我托管Web API并能够调用控制器动作. Owin需要一些Startup类配置,如下: [assembly: OwinStartup(typeof(MyService.App_Start.Startup))] namespace MyServ
我将现有的ASP.NET 5 Web应用程序迁移到ASP.NET 6,并撞到获得集成测试的最终障碍. i自定义WebApplicationFactory,并引发异常:Changing the host configuration using WebApplicationBuilder.WebHost is not supported. Use WebApplication.CreateBuilder(WebApplicationOptions) instead. public class CustomWebApplicationFactory : WebApplicationFactory where TStartup : class { protected override void ConfigureWebHost(IWebHostBuilder builder) {
上下文:我的公司一直在开发由IIS托管的WebAPI应用程序,单个静态内容文件的请求潜伏期约为60ms.我们使用WebAPI自宿主调查了同一应用程序的基准测试,同一内容文件的潜伏期约为15ms,这确实使我们震惊. 从部署过程中,我们喜欢IIS,因为它可以通过将DLL直接复制到我们的Web服务器,为我们提供了极端的灵活性,这并不需要我们进行任何排水. 问题:使用自托管应用程序进行类似的热部署(仅通过DLL复制)是否可行? 解决方案 nope,虽然自助主持人正在执行,但DLL将被锁定,因此您必须先停止自助宿主.您可以执行其他技巧,例如部署到另一个文件夹,然后重新布置请求等.但是它与IIS部署不同. 其他解决方案 自我主机允许您做一些整洁的事情,例如在主要服务下降时会在相同地址上运行辅助服务.例如它可以用重试标头返回503.停止和启动服务以启用复制文件只能花费几秒钟. 另一方面,如果IIS花费的时间比自助宿主花更长的时间来提供静态内容,那么您做错了什么. II
我在IIS上运行了一个Web应用程序,我得到了 System.Data.SqlClient.SqlException: "Login failed for user'domain\account$'". 当功能 dbmigrator.update()称为 时,这是一个例外 private readonly DbMigrationsConfiguration _config; public ContextInitializer(string connectionString) { _config = new Configuration() { TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient") }; } ... public void InitializeDatabase(MgmtStudioContex
我一直在实施IdentityServer4来为我的React应用程序提供授权.我在本地开发环境中有此功能,但是在Windows Server 2016中部署到IIS后遇到了问题.我能够通过/connect/doken端点生成访问令牌,但是当我尝试使用使用保护的API时令牌我得到以下例外: System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'System.String'. ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'System.String'. ---> System.Net.Http.HttpRequestException: A connection attempt failed because the connected party did not proper
我遇到了一个非常奇怪的问题-httpclient的sendasync在请求到特定的Web服务器时永远不会返回. 这是我尝试从 获得响应的示例WebAPI控制器方法 [HttpGet] [Route("api/Entity/Ping")] public async Task Ping([FromUri] int time) { await Task.Delay(TimeSpan.FromMinutes(time)); var bytes = Enumerable.Repeat((byte)42, 100_000_000).ToArray(); HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
我对此代码有问题,我的目标是通过API发送修改,因此我在HttpClient上进行request. using System; using System.Collections.Generic; using System.Net.Http; using System.Text; public class patchticket { public string patch(string ticketid) { using (var httpClient = new HttpClient()) { using (var request = new HttpRequestMessage(new HttpMethod("PATCH"), "https://desk.zoho.com/api/v1/tickets/"+ticketid)) { request.Headers.
所以我整天都在搜寻这一点,我只是不知道该如何工作.基本上,我想在我的ASP.NET WebAPI中使用ITEXT 7创建PDF服务器端.非常简单且简单的PDF创建: [HttpGet] public HttpResponseMessage CreateLieferschein() { MemoryStream stream = new MemoryStream(); PdfWriter writer = new PdfWriter(stream); var pdf = new PdfDocument(writer); var document = new Document(pdf); document.Add(new Paragraph("Hello World!")); } 从这里开始,我不知道如何从控制器返回文件.我真的很感谢任何帮助,因为我只是迷路了. 解决方案 我没有尝试过,只是徒手做,所以请忍受我,但我认为您可以了