我正在ASP中创建一个ActionResult.Net MVC提供图像服务.启用会话状态后,IIS一次只能处理同一用户的一个请求.(这不仅适用于MVC.)

因此,在有多个图像调用此操作的页面上,一次只能处理一个图像请求.它是同步的.

我希望这个映像操作是异步的——我希望每个映像都执行多个映像请求,而不需要前一个映像请求来完成.(如果图像只是静态文件,IIS会以这种方式提供它们.)

因此,我想仅针对对该操作调用禁用会话,或者指定某些请求没有会话状态.有人知道在MVC中是如何做到这一点的吗?谢谢!

推荐答案

与其为此实现一个操作过滤器,不如实现一个RouteHandler

这里是交易——IRouteHandler有一种方法——GetHttpHandler.当你做一个ASP.Net MVC对控制器的请求,默认情况下,路由引擎通过创建MvcRouteHandler的新实例来处理请求,该实例返回MvcHandler.MvcHandlerIHttpHandler的一个实现,标记为(惊喜!)IRequiresSessionState接口.这就是为什么普通请求使用会话.

如果you follow my blog post介绍了如何实现自定义RouteHandler(而不是使用MvcRouteHandler)来提供图像,则可以跳过返回标记为IHttpHandler的会话.

这将使IIS免于将同步性强加给您.它的性能也可能更高,因为它跳过了处理过滤器的所有MVC代码层.

Asp.net相关问答推荐

我可以强制刷新我的样式表文件吗?

IIS 中的嵌套 ASP.NET应用程序继承父配置值?

如何获取已构建、编码的 ViewState 的值?

Azure 自定义控制器/API .Net 后端

某些黑客能否从用户那里窃取 Web 浏览器 cookie 并在网站上使用该名称登录?

如何在 ASP.NET 中使用时区?

Asp.Net 会话在 ashx 文件中为空

ASP.NET IIS - 请求何时排队?

System.Web.HttpContext 无法识别

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

在 ASP.NET 中将虚拟路径转换为实际 Web 路径

如何从 JS 访问 ViewBag

如何使用 app_GlobalResource 或 app_LocalResource?

如何从 HTTP 请求中获取 MAC 地址?

MVC5 身份验证中的......与主域之间的信任关系失败

无法共同创建探查器错误 - 但未使用探查器

在 JavaScript 中获取当前会话值?

Fiddler 没有从 ASP.NET 网站嗅探 SOAP 流量

在 ASP.NET MVC 中获取服务器机器名称?

如何从 ASP.NET Identity 获取用户列表?