加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – ASP.NET中的Async RouteBase与GetRouteDataAsync和GetVirt

发布时间:2020-12-15 06:32:15 所属栏目:百科 来源:网络整理
导读:我有一个自定义ASP.NET路由,其中??有IO操作.现在,假设这些IO操作无法缓存(即太大). 在某种程度上,我正在寻找一个AsyncRouteBase类 public async override TaskRouteData GetRouteDataAsync(HttpContextBase httpContext)public async override TaskVirtualPa
我有一个自定义ASP.NET路由,其中??有IO操作.现在,假设这些IO操作无法缓存(即太大).

在某种程度上,我正在寻找一个AsyncRouteBase类

public async override Task<RouteData> GetRouteDataAsync(HttpContextBase httpContext)
public async override Task<VirtualPathData> GetVirtualPathAsync(RequestContext requestContext,RouteValueDictionary routeValues);

>还有类似的事情已经存在吗? (找不到)
> ASP.NET管道中有没有可以自己创建的地方?

我使用ASP.NET MVC 5.2.3.0

解决方法

您不能创建AsyncRouteBase,因为ASP.NET MVC使用的路由是同步的.你必须明白,为了创建异步方法,有人必须异步地使用它们,通过添加异步方法,你无法神奇地使所有的异步.

由于各种原因,路由不能异步,路由被缓存,并且只在执行第一个请求时创建一次.请注意,它们不会改变,并且由于首先执行路由,所以不能在运行时进行更改,如果路由将进行异步数据库调用,则每个请求都必须等待路由条件来实现,这将减缓整个应用程序.

而且您大多不需要AsyncRouteBase,而是可以创建Async Route Handler.

public class AsyncRouteHandler : IRouteHandler
{
    IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
    {
        return new AsyncHttpHandler();
    }
}

public class AsyncHttpHandler : HttpTaskAsyncHandler{
    public override async Task ProcessRequestAsync(HttpContext context)
    {        
    }
}

然而,在这里使用MVC管道将需要大量的工作,但是您可以轻松地忽略并从这里服务您的响应.您可以在其中使用控制器工厂,并创建您的方法来执行您需要的.

另一种替代方法是轻松使用MEF或其他形式的DI来管理更大的代码库并调用AsyncHttpHandler中的各自的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读