问题标签 [asp.net-web-api2]

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 投票
2 回答
5168 浏览

asp.net - 使用 ssl 和客户端证书 (uploadReadAheadSize) 时上传大文件,但不希望预读所有数据

我试图搜索互联网/堆栈溢出,但找不到任何对我有用的相关答案。

我有一个 asp.net web api2 应用程序(仅使用 ssl)。我正在尝试允许大文件上传(最多 ~36mb),但除非我将 uploadReadAheadSize 更改为预读这个大小,否则我会从 IIS 收到一个错误,即请求太长。

我不想设置该属性,因为这样我的数据流只有在 IIS 已经全部读取后才到达。

我的问题是:如何在没有配置大的 uploadreadaheadsize 的情况下使用托管的 asp.net 并使用 ssl(!)和 web api 2 进行大文件上传?因为我采取的所有步骤似乎都不够。

上传预读大小:

指定 Web 服务器将读入缓冲区并传递给 ISAPI 扩展或模块的字节数。每个客户端请求都会发生一次。ISAPI 扩展或模块直接从客户端接收任何附加数据。该值必须介于 0 和 2147483647 之间。默认值为 49152。

如果我没有设置 uploadReadAheadSize 并尝试通过 ssl 上传大文件,这是我得到的错误:

HTTP 错误 413.0 - 请求实体太大

您可以尝试的事情:页面未显示,因为请求实体太大。

最可能的原因:

Web 服务器拒绝为请求提供服务,因为请求实体太大。Web 服务器无法为请求提供服务,因为它正在尝试协商客户端证书,但请求实体太大。请求 URL 或 URL 的物理映射(即 URL 内容的物理文件系统路径)太长。您可以尝试的事情:验证请求是否有效。如果使用客户端证书,请尝试:

增加 system.webServer/serverRuntime@uploadReadAheadSize

配置您的 SSL 端点以协商客户端证书作为初始 SSL 握手的一部分。(netsh http 添加 sslcert ... clientcertnegotiation=enable)

如果我将预读配置为我想要允许的大小,iis 允许我的请求:

我在 web.config 中配置了这个:

我有一个接收文件的虚拟控制器

属性和策略:

我在请求中得到的内容

确实,我是无缓冲的,但由于预读,IIS 仍然已经读取了此上下文之前的所有数据

0 投票
9 回答
53900 浏览

c# - 点字符'.' 在 MVC Web API 2 中用于请求,例如 api/people/STAFF.45287

我试图让工作的 URL 是一种风格的 URL:http ://somedomain.com/api/people/staff.33311(就像 LAST.FM 的网站允许在其 RESTFul 和网页 URL 中使用各种标志,例如“ http://www.last.fm/artist/psy'aviah ”是 LAST.FM 的有效 url)。

以下场景有效: - http://somedomain.com/api/people/ - 返回所有人 - http://somedomain.com/api/people/staff33311 - 也可以,但这不是我的m 在我希望 url 接受“点”之后,如下例所示 - http://somedomain.com/api/people/staff.33311 - 但这给了我一个

我已经设置了以下内容:

  1. 控制器“PeopleController”

    /li>
  2. WebApiConfig.cs

    /li>

我已经尝试按照这篇博文http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx的所有提示进行操作,但它仍然无法正常工作。我也认为这很乏味,我想知道是否没有另一个,更好更安全的方式。

我们的 Id 在内部是这样的,所以我们必须找到一种解决方案来以某种方式匹配点,最好是“。”的样式。但如果需要,我愿意接受有关 url 的替代建议......

0 投票
1 回答
59 浏览

asp.net-web-api - restful GET 路由不应该适用于控制器

我怎样才能禁止数字 1) 被执行?我希望只有数字 2) 触发 Get 操作,因为只有这条路线是安静的,并且只有映射到该操作的路线才能触发该操作。至少这是我对 Rest 和 web api 的初学者意见......

1) \api\user 触发 Get 动作。

2) \api\users 触发 Get 动作。

0 投票
1 回答
775 浏览

asp.net-web-api - 单个 ApiController 中的多个 IHttpActionResults GET 失败

我正在玩 WebApi2 并遇到了一个奇怪的问题。

我已更新默认 ValuesController 以使用 IHttpActionResult

喜欢

当我尝试在邮递员中调用 Get() 时,出现错误

{ "Message": "发生错误。", "ExceptionMessage": "找到与请求匹配的多个操作:\r\nSystem.Web.Http.IHttpActionResult Get() on type WebApplication1.Controllers.ValuesController\r\ nSystem.Web.Http.IHttpActionResult Get2() on type WebApplication1.Controllers.ValuesController", "ExceptionType": "System.InvalidOperationException", "StackTrace": " at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n 在 System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n 在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken cancelToken)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancelToken)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()" }

我是否需要为每个人手动创建一条路线才能使其正常工作?

这么简单的事情,却让我头疼!

0 投票
1 回答
43 浏览

build-process - 为什么我发布项目时不调用 ccrewrite?

我终于让 ccrewrite 工作了,我的单元测试也通过了,但是当我发布一个 Web 项目时,它一直在爆炸,就好像它没有被重写一样。用 JustDecompile 检查后,代码没有被重写:

上面应该是__ContractsRuntime......如果它被重写了。

建议?

0 投票
1 回答
37185 浏览

c# - 请求的资源不支持 HTTP 方法 GET

当我运行这个 url 时:/api/users/1它只在我使用 HttpDelete-Attribute 时映射到 Delete 操作。这种行为的原因是什么?

否则我会收到他的消息:请求的资源不支持 HTTP 方法 GET

这些是我的路线:

0 投票
1 回答
1361 浏览

cookies - Cookie 未保存

我有两个子域,local-api.domain.com 和 local-web.domain.com

local-web.domain.com 有一个页面 (local-web.domain.com/test/authtest) 通过 AJAX 调用到 local-api 上的登录服务 (local-api.domain.com/authentication/login)。域名.com。登录检查用户发布的凭据,如果它们有效,则通过 ASP.Net 表单身份验证将用户登录。以下是从服务返回的示例原始响应:

但是,当我重新加载页面时;我发现响应中设置的 cookie 不存在。使用 Chrome 开发者工具进行的进一步调查发现,在登录响应后,cookie 甚至没有被保存;即使有一个 Set-Cookie 标头。

我不确定我在这里做错了什么。浏览网站上的类似问题及其回答;我相信我已经正确设置了cookie,以便在我的子域中保存和重新发送。上一小时一直在谷歌搜索,但没有找到任何东西。有任何想法吗?

0 投票
1 回答
2399 浏览

c# - Catch-all 路由无法使用 WebApi2 ApiController 找到路由

我正在创建一个 WebApi2 服务,并且我要实现的方法之一表示来自内部树结构中的对象的 HTTP GET - 因此请求将遵循以下内容:

所以我希望我的方法接收“path/to/object/in/tree”。

但是,当我运行它时,我只得到一个 404,有趣的是,我得到一个与标准 IIS 404 不同的 404。它的标题是“'/'应用程序中的服务器错误。”,而一个完全无效的资源标题为“HTTP 错误 404.0 - 未找到”。

我正在使用默认模板来尝试看看我是否可以让它工作,因此相似。

我有这个RouteConfig

这是我的ValuesController

有趣的是,如果我从中派生Controller而不是ApiController它可以正常工作,但是正常的属性路由不起作用。

我尝试按照这篇文章(http://www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-route-parameter-binding)中的方法,但我无法让它工作。

我确定我错过了一些愚蠢的简单的东西,但是在花了几个小时之后,我认为问我做错了什么是谨慎的。

谢谢

0 投票
1 回答
4673 浏览

autofac - AutoFac Web Api 2 集成问题

我刚刚将我所有的 Autofac 包更新到最新版本以获得对 web api 2 的支持。在我的 api 控制器中,我设置了一个构造函数,请求一个服务层类的实例,这与我在所有 mvc 中使用 autofac 的方式相同控制器,它工作正常。

在应用程序启动时执行的 ioc 配置中,我已经注册了 web api 控制器。

我也试过

但是 autofac 不能与我的 api 控制器一起使用,请求注入服务类的构造函数甚至没有被执行。如果我没有在 api 控制器上包含默认参数少的构造函数,我也会收到错误消息。

web api 2 和 auto fac 是否存在已知问题,还是我遗漏了什么?

0 投票
2 回答
4926 浏览

asp.net-web-api - 使用 web api 在请求正文中获取具有复杂类型参数的请求

我想对以下操作进行集成测试。

如何在集成测试中传递我的 requestDto 对象?

GetAsync 和 SendAsync 方法都没有用于将自定义对象传递给服务器的重载参数。

更新

正如 Darrel Miller 所说:“从技术上讲,HTTP 说你可以发送一个 body,它只是说这个 body 没有任何意义并且不能被使用。HttpClient 不会让你发送一个。”

我在这里发布了我与 HttpClient 的集成测试,它使用复杂类型 + FromBody 执行 Get 请求:

当然,这不是 Http 方式,有些人可能会考虑通过 FromUri/query 字符串以不同的方式发送复杂类型。