当前位置: 首页 > news >正文

北航刘禹导师做网站桂林网站制作公司华彩

北航刘禹导师做网站,桂林网站制作公司华彩,网站已运行时间代码,优化器RequestDelegate上次#xff0c;我们在《如何判断当前请求的API类型》中查看endpoints.MapControllers()实现时#xff0c;最终定位到ActionEndpointFactory.cs#xff0c;其中有这样一段代码#xff1a;private static RequestDelegate CreateRequestDelegate() {// We do… RequestDelegate上次我们在《如何判断当前请求的API类型》中查看endpoints.MapControllers()实现时最终定位到ActionEndpointFactory.cs其中有这样一段代码private static RequestDelegate CreateRequestDelegate() {// We dont want to close over the Invoker Factory in ActionEndpointFactory as// that creates cycles in DI. Since were creating this delegate at startup time// we dont want to create all of the things we use at runtime until the action// actually matches.//// The request delegate is already a closure here because we close over// the action descriptor.IActionInvokerFactory? invokerFactory  null;return (context) {var endpoint  context.GetEndpoint()!;var dataTokens  endpoint.Metadata.GetMetadataIDataTokensMetadata();var routeData  new RouteData();routeData.PushState(router: null, context.Request.RouteValues, new RouteValueDictionary(dataTokens?.DataTokens));// Dont close over the ActionDescriptor, thats not valid for pages.var action  endpoint.Metadata.GetMetadataActionDescriptor()!;var actionContext  new ActionContext(context, routeData, action);if (invokerFactory  null){invokerFactory  context.RequestServices.GetRequiredServiceIActionInvokerFactory();}var invoker  invokerFactory.CreateInvoker(actionContext);return invoker!.InvokeAsync();}; }从代码上理解应该是执行请求时会创建IActionInvokerFactory实例由它创建 invoker 执行。是不是这样呢我们验证一下IActionInvokerFactory新建CustomActionInvokerFactory.cs继承IActionInvokerFactory实现代码如下public class CustomActionInvokerFactory : IActionInvokerFactory {private readonly IActionInvokerProvider[] _actionInvokerProviders;public ActionInvokerFactory(IEnumerableIActionInvokerProvider actionInvokerProviders){_actionInvokerProviders  actionInvokerProviders.OrderBy(item  item.Order).ToArray();}public IActionInvoker? CreateInvoker(ActionContext actionContext){var context  new ActionInvokerProviderContext(actionContext);foreach (var provider in _actionInvokerProviders){provider.OnProvidersExecuting(context);}for (var i  _actionInvokerProviders.Length - 1; i  0; i--){_actionInvokerProviders[i].OnProvidersExecuted(context);}return context.Result;} }代码 Copy 自 ASP.NET Core 内部实现类ActionInvokerFactory。然后在 Startup.cs 注册实现public void ConfigureServices(IServiceCollection services) {services.AddSingletonIActionInvokerFactory, CustomActionInvokerFactory();... }打上断点执行API发现确实如设想中一样请求时执行CreateInvoker方法在其中发现了一个很有意思的属性MethodInfo,正是对应我们执行的 Action 方法。突发奇想如果我们替换MethodInfo属性是不是会执行其他方法呢Demo创建 WeatherForecast2Controller实现代码如下[ApiController] [Route([controller])] public class WeatherForecast2Controller : ControllerBase {[HttpGet]public string Get2(){return My IO;} }可以看到这是和原方法完全不同的实现。现在进行替换var actionDescriptor  actionContext.ActionDescriptor as ControllerActionDescriptor; actionDescriptor.MethodInfo  typeof(WeatherForecast2Controller).GetMethod(Get2);执行出现错误提示查看ControllerActionInvokerCache.cs实现var objectMethodExecutor  ObjectMethodExecutor.Create(actionDescriptor.MethodInfo,actionDescriptor.ControllerTypeInfo,parameterDefaultValues);原来还要替换actionDescriptor.ControllerTypeInfo:var actionDescriptor  actionContext.ActionDescriptor as ControllerActionDescriptor; actionDescriptor.MethodInfo  typeof(WeatherForecast2Controller).GetMethod(Get2); actionDescriptor.ControllerTypeInfo  typeof(WeatherForecast2Controller).GetTypeInfo();再次运行执行成功结论替换 Action 实际执行方法最好的使用场景是定制化开发比如客户需求和产品实现完全不同可以保证请求不变的情况下执行客户定制化实现。想了解更多内容请关注我的个人公众号”My IO“
http://www.huolong8.cn/news/297906/

相关文章:

  • 专业提供网站建设服务使用pycharm网站开发
  • 网站建设广告平台推广网站开发的销售
  • html5手机网站制作教程国内永久免费网络游戏推荐
  • 单页式网站 seo网站建设外包流程
  • 潍坊外贸建站外贸页面网站制作
  • 网站界面诊断东莞网站公司哪家好
  • 建设银行官方网站企业网银下载京东网上购物并安装
  • 钦州建设局网站一建报名时间2023
  • 如何用华为云服务器做网站石基网站建设
  • 高端网站建设哪些好做做电气的什么招聘网站好
  • 网站建站建设35个成功的市场营销策划案例
  • 怎么上线网站洛阳市网站建设管理
  • 档案网站建设对比如何刷网站流量
  • 建设网站前准备资料做网站找酷万
  • 天津新亚太工程建设监理有限公司网站江门网站推广哪里专业
  • 建设 网站协议范本上海门户网站的亮点
  • 做a图片网站建设银行网站 查余额查询
  • 智能化建设网站做视频赚钱的网站
  • 嘉兴专业做网站wordpress 多个边栏
  • 建设银行注册网站的用户名怎么写域名注册和网站哪个好
  • 程序开发外包平台优化落实新十条措施
  • 网站cms管理后台电话号码最好用的素材网站
  • 重庆网站制作系统专门做win7系统的网站
  • 网站备案详细最新流程沈阳哪家网站做的好
  • 建站技术论坛做视频网站用网站空间还是服务器
  • 昆山网站制作江宁区建设工程局网站
  • 广西建设局建设行政主管部网站红色网站呢
  • 网站查询是否安全微信主题wordpress
  • 郑州汉狮做网站报价百度竞价价格查询
  • thinkphp5做的网站平潭综合实验区交通与建设网站