问题标签 [web-api-contrib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
381 浏览

c# - 使用 WebApiContrib 进行路由测试

我有一个正在尝试测试的 WebApi 项目。我有一个控制器 -

我需要测试路线,我正在尝试使用WebApiContrib.Testing包。

现在,我的问题是,在注册路由时,我使用GlobalConfiguration.Configuration.Routes的是HttpRouteCollection.

在我的测试中,我可以访问RouteTable.Routes,但这是RouteCollection.

结果,由于这种类型的不兼容,我无法在我的测试中注册 WebApi 路由。

有没有人遇到过这个问题?我有什么明显的遗漏吗?

0 投票
1 回答
733 浏览

asp.net-web-api - 如何在 JSONP Get 中绑定 MVC API 参数?

我从头开始创建了一个 VS 2012 MVC API 项目,加载了 Nuget“WebApiContrib.Formatting.Jsonp”,添加了一个路由格式化程序,并尝试将参数作为序列化 JSON 作为 JSONP 请求发送。如何识别或访问控制器中的这些参数?

WebApiConfig:

接口方法:

查询:

我尝试修改 Api 方法以包括:

其中 CustomClass 定义为:

到目前为止,这些都没有为参数产生任何东西,但 null 。我应该如何从查询字符串中发布的对象连接这些参数?

编辑:

我可以通过将 JQuery ajax 修改为:

为此,我可以取消字符串化[FromUri] string value并获取我的强类型对象。

不过,我希望数据绑定器将参数反序列化为强类型对象。什么技术使这种情况发生?

0 投票
3 回答
1799 浏览

c# - DelegatingHandler 中没有响应头

我正在尝试记录我的 Web API 项目的 HTTP 响应标头。

该项目由 VS2012、.NET 4.5 和 ASP.NET MVC 4 开发。

我写了一个这样的DelegatingHandler子类:

但是,问题是,我无法从response. response.Headers是一个空集合,response.Content.Headers只包含一个名为 的键Content-Type,并且HttpContext.Currentnull

我看过WebAPIContrib的代码,它使用相同的逻辑来记录标题,但它们的代码似乎也不起作用。

那么我应该如何跟踪 Web API 项目中的 HTTP 响应标头呢?

0 投票
2 回答
1100 浏览

asp.net - 使用 WebApiContrib.Testing 测试 ASP.NET Web API POST 和无参数 GET 路由

我正在尝试使用 WebApiContrib.Testing 库设置一些路由测试。我的 get 测试(像这样)工作正常......

我在后期测试中相当迷失 - 我目前有以下失败并出现 NotImplementedException ......

这是完整性的设置和拆卸...

我要测试的路由是默认的 POST 路由,它映射到这个方法调用......

我在这个测试没有参数的标准 GET 路由返回所有项目的测试中也失败了......

哪个正在测试这种方法......

我读过的几篇文章都推荐了这个库,但我现在不确定我是否做错了什么,或者它是否非常有限,我最好自己动手。

0 投票
2 回答
235 浏览

jsonp - WebApiContrib Jsonp 和属性路由

根据WebApiContrib.Formatting.Jsonp GitHub 自述文件,似乎应该在 RouteConfig.cs 中输入:

我的 AppStart 中目前没有 RouteConfig.cs 文件。我使用 Web API 2 模板创建了它,我认为我没有在结构上进行任何更改。我确实有一个 WebApiConfig.cs 我已经设置:

如何包含它以使所有路由都能够返回 Jsonp?

0 投票
0 回答
138 浏览

asp.net-web-api - 如何在 WebAPI 操作上选择性地启用 JSONP?

我正在使用 ASP.NET Web API v2.0 来构建 Web api。

我需要在 CORS/JSONP 中提供一些控制器/操作,所以我选择使用 WebApiContrib.Formatting.Jsonp。

因为我还没有使用Web API v2.1,所以我只能使用WebApiContrib v0.9.7.0。

如果我在 Global.ascx.cs 中添加 JSONP 格式化程序,它将打开我所有的 CORS/JSONP 控制器和操作,因此我在下面编写了操作过滤器以在特定时间添加和删除格式化程序。

现在,我的问题是,如果有多个请求进入,该代码是否是线程安全的?

0 投票
1 回答
263 浏览

c# - 使用 webapicontrib.formatting.xlsx 的内容类型

我正在使用 webapi2 和 webapicontrib.formatting.xlsx 创建 Excel 文件。

如果我在 webapiconfig.cs 中添加这一行,它可以正常工作

但是后来我失去了默认内容协商的可能性,我的意思是,如果请求 json 或来自浏览器(期望 xml)的东西,它总是检索二进制文件,所以我删除了该行(我更喜欢默认行为)

我尝试在请求中添加:

但不检索文件,它使用 json 格式化程序。

如何维护默认的格式化程序行为(在 webapiconfig.cs 中添加了 xlsx)以及在请求特定 url 时获取文件?

谢谢。吉列尔莫。

0 投票
0 回答
283 浏览

c# - 如何转换 IEnumerable到 Byte64 进行文件下载

我正在使用 WebApiContrib.Formatting.xlsx 创建和下载 Microsoft Excel 文件。我的问题是,当从客户端调用时,文件无法打开,并且尝试了几种方法。在处理 PDF 时,问题已解决,将输出转换为 Byte64,如下所示:

在 WebApiContrib.Formatting.xlsx 的情况下,我有一个 IEnumerable。如何将其转换为与 PDF 相同的方式。

var subscriptionExcelModels = subscriptionPlansConverted as SubscriptionExcelModel[] ?? subscriptionPlansConverted.ToArray();

这是我对 excel 文件最后一部分代码的片段:

0 投票
1 回答
484 浏览

c# - 处理 Web API 中的无效 JSONP 请求

我在 Web API 2 服务中使用WebApiContrib.Formatting.Jsonp ,以及用于 API 文档和测试的Swagger 。

当我通过Swagger触发任何 JSONP 方法时,我的服务在文件JsonpMediaTypeFormatter.cs的以下行中崩溃:

一方面,我不明白为什么Swagger不允许为 JSONP 请求指定回调名称。但更重要的是,我不希望服务因此而崩溃。

问题:

  • 我们如何在服务端处理此类错误?
  • 有没有办法让Swagger正确发送 JSONP 请求?(比如为所有 JSONP 请求预定义回调名称?)
0 投票
0 回答
294 浏览

asp.net - 反序列化 protobuf-net 请求时出现 ArgumentOutOfRangeException

在部署了我们的一个应用程序的新版本后,我们开始看到来自 WebApiContrib/protobuf-net 的多个 ArgumentOutOfRangeExceptions。它以前发生过一次,但在部署后发生得更频繁(5-10 次左右)。它只发生在少数几个请求中,我无法在本地或其他环境中重现。错误发生在多台机器上。

调用应用程序安装一个带有 protobuf 合约的 Nuget 类库,并且该合约已在此版本的被调用应用程序中更新。一些属性被删除(不改变 ProtoMember.Tag),一些属性被标记为 IsRequired=false 而不是 true。

是否有人对可能失败的原因或我们如何进一步诊断有任何见解?

版本:

更新:

  • 我们尝试从 WebApiContrib.Formatting 中删除 ProtobufFormatter,而是使用 Serializer.Deserialize 直接在代码中进行反序列化。那没有效果。
  • 然后我们添加了重试。将 stream.Position 重置为 0 并再次反序列化。这样可行。
  • 我们现在将 Request.Content 记录为 base64 字符串。该内容反序列化得很好,当尝试在本地复制它时,即使有数千个请求,也没有任何失败。