问题标签 [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.
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 仍然已经读取了此上下文之前的所有数据
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 - 但这给了我一个
我已经设置了以下内容:
控制器“PeopleController”
/li>WebApiConfig.cs
/li>
我已经尝试按照这篇博文http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx的所有提示进行操作,但它仍然无法正常工作。我也认为这很乏味,我想知道是否没有另一个,更好更安全的方式。
我们的 Id 在内部是这样的,所以我们必须找到一种解决方案来以某种方式匹配点,最好是“。”的样式。但如果需要,我愿意接受有关 url 的替代建议......
asp.net-web-api - restful GET 路由不应该适用于控制器
我怎样才能禁止数字 1) 被执行?我希望只有数字 2) 触发 Get 操作,因为只有这条路线是安静的,并且只有映射到该操作的路线才能触发该操作。至少这是我对 Rest 和 web api 的初学者意见......
1) \api\user 触发 Get 动作。
2) \api\users 触发 Get 动作。
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()" }
我是否需要为每个人手动创建一条路线才能使其正常工作?
这么简单的事情,却让我头疼!
build-process - 为什么我发布项目时不调用 ccrewrite?
我终于让 ccrewrite 工作了,我的单元测试也通过了,但是当我发布一个 Web 项目时,它一直在爆炸,就好像它没有被重写一样。用 JustDecompile 检查后,代码没有被重写:
上面应该是__ContractsRuntime
......如果它被重写了。
建议?
c# - 请求的资源不支持 HTTP 方法 GET
当我运行这个 url 时:/api/users/1
它只在我使用 HttpDelete-Attribute 时映射到 Delete 操作。这种行为的原因是什么?
否则我会收到他的消息:请求的资源不支持 HTTP 方法 GET
这些是我的路线:
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,以便在我的子域中保存和重新发送。上一小时一直在谷歌搜索,但没有找到任何东西。有任何想法吗?
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)中的方法,但我无法让它工作。
我确定我错过了一些愚蠢的简单的东西,但是在花了几个小时之后,我认为问我做错了什么是谨慎的。
谢谢
米
autofac - AutoFac Web Api 2 集成问题
我刚刚将我所有的 Autofac 包更新到最新版本以获得对 web api 2 的支持。在我的 api 控制器中,我设置了一个构造函数,请求一个服务层类的实例,这与我在所有 mvc 中使用 autofac 的方式相同控制器,它工作正常。
在应用程序启动时执行的 ioc 配置中,我已经注册了 web api 控制器。
我也试过
但是 autofac 不能与我的 api 控制器一起使用,请求注入服务类的构造函数甚至没有被执行。如果我没有在 api 控制器上包含默认参数少的构造函数,我也会收到错误消息。
web api 2 和 auto fac 是否存在已知问题,还是我遗漏了什么?
asp.net-web-api - 使用 web api 在请求正文中获取具有复杂类型参数的请求
我想对以下操作进行集成测试。
如何在集成测试中传递我的 requestDto 对象?
GetAsync 和 SendAsync 方法都没有用于将自定义对象传递给服务器的重载参数。
更新
正如 Darrel Miller 所说:“从技术上讲,HTTP 说你可以发送一个 body,它只是说这个 body 没有任何意义并且不能被使用。HttpClient 不会让你发送一个。”
我在这里发布了我与 HttpClient 的集成测试,它使用复杂类型 + FromBody 执行 Get 请求:
当然,这不是 Http 方式,有些人可能会考虑通过 FromUri/query 字符串以不同的方式发送复杂类型。