Tag: asp.net web api

WebAPI请求流支持

我正在编写一个ASP.NET Web API应用程序,它要求我接受文件上载并将该文件转发到另一个HTTP端点。 我担心如果许多用户尝试上传每个100MB的文件(这是一个有效的用例),那么我的应用程序将占用大量内存,并且根据大量请求的数量,这个占用空间可能会变大,我的应用程序会龙骨过度死亡。 理想情况下,只要Web服务器开始接收文件以显着减少服务器上的负载,我就会开始将文件流式传输到其他HTTP端点。 我确信这个过程有一个名字,但我不知道 – 这使得搜索相当艰难。 我在Web API中使用Response Streaming做了很多工作,但我以前从未考虑过请求流。 我能说的最好我需要弄清楚如何: 在完成上传之前开始处理流。 使用HttpClient流式传输相同的请求,以将相同的数据流式传输到另一个HTTP端点。 任何人都可以给我一些指示吗?

将WebSockets与ASP.NET Web API一起使用

在ASP.NET Web API应用程序中使用原始websockets的首选方法是什么? 我们想在ASP.NET Web API应用程序的几个接口上使用二进制 WebSockets。 我很难确定应该如何完成这项工作,因为.NET似乎存在多个在线冲突和/或过时的实现。 有些示例似乎是像这样的ASP.NET,但我认为必须有一种方法在Web API框架中使用websockets。 据我所知,您可以在WebAPI中使用Signalr。 我以为使用Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler可以工作,但我不知道如何将WebSocketHandler链接到Controller … class MyServiceController : ApiController { [HttpGet] public HttpResponseMessage SwitchProtocols (string param) { HttpContext currentContext = HttpContext.Current; if (currentContext.IsWebSocketRequest || currentContext.IsWebSocketRequestUpgrading) { // several out-dated(?) examples would // use ‘new MySocketHandler’ for ??? var unknown = new ???? currentContext.AcceptWebSocketRequest(unknown); return Request.CreateResponse(HttpStatusCode.SwitchingProtocols); } } […]

WebAPI和ODataController返回406 Not Acceptable

在将OData添加到我的项目之前,我的路由设置如下: config.Routes.MapHttpRoute( name: “ApiById”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional }, constraints: new { id = @”^[0-9]+$” }, handler: sessionHandler ); config.Routes.MapHttpRoute( name: “ApiByAction”, routeTemplate: “api/{controller}/{action}”, defaults: new { action = “Get” }, constraints: null, handler: sessionHandler ); config.Routes.MapHttpRoute( name: “ApiByIdAction”, routeTemplate: “api/{controller}/{id}/{action}”, defaults: new { id = RouteParameter.Optional }, constraints: new { […]

是否可以覆盖MultipartFormDataStreamProvider,以便不上传到文件系统?

我有一个ASP.Net Web API应用程序,允许客户端(HTML页面和iPhone应用程序)上传图像。 我正在使用本文所述的异步上载任务。 当我想要保存到文件系统时,一切都很有效,因为这就是这个代码在幕后看起来自动执行的操作。 但是,我不想将上传的文件保存到文件系统中。 相反,我想使用AWS SDK for .Net获取上传的流并将其传递到Amazon S3存储桶。 我已将代码设置为将流发送到AWS。 我无法弄清楚的问题是如何从Web API方法获取上传的内容流,而不是让它自动保存到磁盘。 我希望我可以在MultipartFormDataStreamProvider中覆盖一个虚拟方法,它允许我对上传的内容做其他事情,而不是保存到磁盘,但似乎没有。 有什么建议?

Web API – 405 – 请求的资源不支持http方法’PUT’

我有一个Web API项目,我无法启用针对它的“PUT / Patch”请求。 我从小提琴手那里得到的回应是: HTTP/1.1 405 Method Not Allowed Cache-Control: no-cache Pragma: no-cache Allow: GET,POST,DELETE Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/8.0 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcUHJvamVjdHNcZG90TmV0XFdlYkFQSVxBZFNlcnZpY2VcQWRTZXJ2aWNlXGFwaVxpbXByZXNzaW9uXDE1?= X-Powered-By: ASP.NET Date: Tue, 06 May 2014 14:10:35 GMT Content-Length: 72 {“message”:”The requested resource does not support http method ‘PUT’.”} 根据上述回复,不接受“PUT”动词。 但是,我无法弄清楚相关处理程序的配置位置。 类的“Put”方法声明如下: [HttpPatch] [HttpPut] public HttpResponseMessage Put(Int32 […]

使用HttpClient将字节数组发布到Web API服务器

我想将此数据发布到Web API服务器: public sealed class SomePostRequest { public int Id { get; set; } public byte[] Content { get; set; } } 将此代码用于服务器: [Route(“Incoming”)] [ValidateModel] public async Task PostIncomingData(SomePostRequest requestData) { // POST logic here } 这个 – 对于客户: var client = new HttpClient(); client.BaseAddress = new Uri(“http://localhost:25001/”); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(“application/json”)); var content = […]

微服务架构中的ASP.NET身份

我试图通过将主要组件分解为单独的Web服务器来使用微服务架构来实现Web应用程序。 我正在使用ASP.NET Identity(仅限电子邮件/用户名登录,没有Facebook等)和“主”应用程序服务器来实现身份validation服务器。 我目前的挑战是弄清楚如果用户通过身份validation服务器登录,应用程序服务器将如何识别。 由于身份validation服务器生成用户validation用户身份的令牌,我想它们存储在某个地方并且可以由应用程序服务器查询,但我不确定如何执行此操作。 理想情况下,我的应用程序服务器WebAPI端点将能够使用[Authorize]注释。 问:一个服务器如何使用ASP.NET标识通过单独的身份validation服务器控制访问?

多个控制器类型具有相同的路由前缀ASP.NET Web Api

是否可以将GET和POST分离为单独的API控制器类型并使用相同的路径前缀访问它们? 这是我的控制器: [RoutePrefix(“api/Books”)] public class BooksWriteController : EventStoreApiController { [Route(“”)] public void Post([FromBody] CommandWrapper commandWrapper){…} } [RoutePrefix(“api/Books”)] public class BooksReadController : MongoDbApiController { [Route(“”)] public Book[] Get() {…} [Route(“{id:int}”)] public Book Get(int id) {…} }

从其他设备访问Azure模拟器

我有两个不同的项目: Windows Phone 8应用程序,我在一个真实的物理开发设备上运行。 Azure云服务,包含一个包含ASP.NET MVC WebAPI的简单WebRole端点。 我的目标很简单: 使用从真实设备运行的WP8应用程序,在将WebAPI控制器部署到Azure仿真器时访问(使用HTTPClient)。 做的是: 在Azure云上部署应用程序时,该应用程序可以成功与WebApi进行通信。 当应用程序在IIS Express (无Azure)上本地托管时,应用程序可以成功与WebApi进行通信,并且在本文后面会更改IIS Express设置。 据我所知,问题是Azure模拟器配置为侦听IP地址127.0.0.1,该地址无法从localhost域外部访问。 我发现这篇文章提供了这个确切问题的解决方案,但是在尝试部署到Azure模拟器时尝试遵循它会导致未知exception。 是否真的无法在本地测试与Azure Cloud Service通信的WP8应用程序?

HttpSelfHostServer和HttpContext.Current

我正在开发一个自托管的ASP.NET web api-application。 一切正常,但现在我正在努力与HttpContext : 我需要从客户端保存会话信息。 但是HttpContext.Current总是为null。 所以很明显我的HttpSelfHostServer不能使用静态HttpContext-Class。 我不明白的是:为什么……? 我无法想办法告诉HtttpSelfHostServer和HttpSelfHostConfiguration都不能使用HttpContext 。 这就是我正在做的事情: 创建HttpSelfHostConfiguration 1.1添加Service-Resolvers和Routes 1.2添加自定义UserNamePassword-Validator 使用config创建新的HttpSelfHostServer实例 2.1 server.OpenAsync().Wait() 任何帮助我如何告诉我的服务器使用HttpContext.Current非常感谢! 干杯!