新闻详情

新闻详情

首页 / 资讯中心 / 详情

ASP.NET Core MVC入站请求全流程:从端口到Action执行

发布时间:2026/9/30 8:26:42来源:尧图网络
ASP.NET Core MVC入站请求全流程:从端口到Action执行
“请求是怎么进入MVC框架的”这几乎是每个从“会用路由、会写控制器”到“真正想搞懂ASP.NET Core管道”的人都绕不开的坎。我见过太多人写接口没问题但一问“请求进来了然后呢”就卡住了——知道有中间件、知道有路由、知道有模型绑定但这几块到底怎么拼起来顺序是什么谁先谁后为什么有的地方能拿到请求体、有的地方拿不到全是靠猜。这篇东西就是要把这条线彻底捋清楚讲的是inbound方向也就是请求从网络端口一路流进Controller Action的完整路径。先说结论方便你有个全局概念一个HTTP请求进入ASP.NET Core MVC通常会经过“服务器接收、HttpContext构建、中间件管道流转、路由匹配、端点激活、Controller激活、模型绑定、过滤器管道、Action执行”这几个大环节。其中最核心的分水岭在两个地方一是路由怎么把URL变成一个“终点”二是MVC激活器怎么根据终点执行Action。本文就把这两条线展开再加上实际Demo和踩坑记录保证你读完能在脑子里画出一张完整的地图。1. inbound的本质请求从端口到Action的完整路径1.1 先搞清楚inbound和outbound分别指什么在ASP.NET Core MVC里“inbound”和“outbound”是一对非常有用的方向性术语。inbound指的是请求从外部流向应用内部也就是用户从浏览器或客户端发一个HTTP请求这个请求被服务器接收、解析、路由最终到达你的Controller Action。另一个方向叫outbound是反过来的比如我们在Razor视图里用asp-controller、asp-action生成一个链接URL或者用Url.Action()生成跳转地址这种从应用内部生成外部可访问URL的过程就是outbound。理解这两个方向的区别有个实际好处当你路由匹配不上、404的时候你是在处理inbound的问题当你生成了错误URL链接、跳转到了一个错误地址的时候你是在处理outbound的问题。方向不同排查路径完全不一样。我见过不少人把两者混在一起排查结果越查越乱。为什么inbound更值得深挖因为它几乎涵盖了框架处理请求的全部工作量包括最容易被误解的中间件管道顺序、路由表的构建时机、模型绑定的数据来源优先级、Action选择器的筛选规则。这些东西相互交织从一个请求进入开始逐步推进到Action执行整个链路才算完整。1.2 从Kestrel接收请求到中间件管道流转一个请求刚进来的时候第一站其实是服务器。在ASP.NET Core里无论你是用Kestrel、IIS还是IIS Express第一步都是服务器监听TCP端口把HTTP报文解析成一个标准化的HttpContext对象。这个对象包含了Request和Response两个大块分别代表请求数据和即将返回的响应数据。但HttpContext从创建到真正执行业务逻辑之间还有一个极其关键的结构叫中间件管道。你大概听过一句话“ASP.NET Core的一切都是中间件。”这话虽然绝对但确实说中了骨架。整个应用在启动时会像搭积木一样把一个个中间件排成一条链每个请求依次流过这条链。var app builder.Build(); app.UseStaticFiles(); // 静态文件中间件先放行 wwwroot 下的资源 app.UseRouting(); // 路由匹配中间件解析出当前请求的匹配结果 app.UseAuthentication(); // 身份认证中间件 app.UseAuthorization(); // 授权中间件 app.MapControllers(); // 注册MVC控制器端点配合UseRouting生效 app.Run();这段代码是默认模板里的“标准五件套”也是inbound流程的主干。注意一个容易踩坑的点UseRouting和MapControllers的位置关系很微妙。UseRouting的作用是执行路由匹配但它只负责“选”不负责“调”。真正让MVC执行Action的是后面MapControllers注册的EndpointMiddleware。你可以把UseRouting理解成在给请求找“候选终点”而MapControllers在管道末端才真正“叫号”。有些刚入门的朋友在中间件管道里写了一个自定义中间件发现里面context.Request.RouteValues总是空觉得是自己代码写错了。其实不是你的中间件很可能是放在UseRouting之前执行的路由匹配还没跑RouteValues当然是空。这就是“顺序即逻辑”的一个典型例子。2. MVC的入站路由机制从URL到控制器的精确定位2.1 路由引擎如何“从外向内”逐层匹配路由是整个inbound过程的第一个重头戏。很多人在URL上出问题时总喜欢去查Controller和Action的命名但忽略了路由匹配本身是一套逐层递进的机制。第一层URL模式匹配。框架拿当前请求的Path如/order/details/5和你项目里所有路由模板如{controller}/{action}/{id?}逐个比对。这一层比的纯粹是“格式”。模板里的{controller}、{action}、{id}都是占位符冒号后面接的比如{id:int}是约束条件。格式对不上直接放弃这个候选。第二层路由约束校验。假设有两个路由模板都能匹配同一个URL{controller}/{action}/{id}和admin/{controller}/{action}/{id}这时约束和优先级会起作用。比如URL有个数字类型的id那么带{id:int}约束的那条路由会优先胜出反之如果约束校验失败那一整条路由都会被判无效。第三层端点选择。匹配完成后框架会得到一个Endpoint对象。如果你用的是约定路由那这个Endpoint上会挂着MVC给它生成的ControllerActionDescriptor如果用的是属性路由那Controller的[Route]、[HttpGet]这些特性直接决定了Endpoint长什么样。这一步本质上是“从一个URL字符串变成一个可执行的Action元数据”。第四层ActionSelector筛选。其实Endpoint可能对应多个候选Action比如你给同一个路径写了[HttpGet]和[HttpPost]两个方法路由匹配本身不区分HTTP动词它会把两个都作为候选。真正的筛选发生在MVC内部的ActionSelector里它会根据请求的HttpMethod、请求头里的Accept、参数绑定情况从候选集中挑出唯一一个Action。打个比方路由匹配好比外卖平台根据你的地址找到哪几家店可以送餐而ActionSelector是让用户最终下单的那一步。平台可以同时显示几家店但用户只能选一家下单。请求也是这样匹配阶段可能有多个候选最终必须唯一。2.2 约定路由和属性路由的取舍在ASP.NET Core MVC里有两种声明路由的方式你必须对它们的优劣非常清楚约定路由集中式在启动代码里写app.MapControllerRoute(name: default, pattern: {controllerHome}/{actionIndex}/{id?})一个模板管全部。特点是简单、统一、改起来方便但问题也很明显——所有Controller跟着一套URL格式走灵活性差。属性路由分散式直接在Controller和Action上用[Route(api/order/{id})]、[HttpGet]这种特性指定。灵活、精准、微服务风格友好但写多了以后URL分散在代码各处需要好的规范来约束。我个人的选择是新项目默认用属性路由。原因很实际。第一现代前后端分离项目里接口URL往往是设计好的属性路由能精确匹配设计图第二约定路由在复杂业务里会被各种“特殊接口”破防最后加一堆特判维护成本直线上升第三由于Controller是独立的属性路由天然支持把一个项目的接口URL收敛到每个Controller自己身上阅读代码时马上能看清这个接口长什么样子。不过约定路由也不是一无是处。如果你的团队全是CRUD风格接口格式高度统一控制器和方法命名规范那么约定路由一行的配置就能覆盖大多数接口开发效率很高。关键是判断你团队的代码风格而不是迷信某一种。3. 核心细节Endpoint之后MVC内部做了什么3.1 从Endpoint到ControllerActionInvoker路由匹配搞定后inbound过程进入了第二阶段MVC内部的执行准备。这里有个容易忽略的概念叫ControllerActionInvoker它是真正负责“调用你的Action方法”的核心执行器。框架把Endpoint里的ControllerActionDescriptor取出来然后经过下面几个步骤根据ControllerActionDescriptor里的ControllerTypeInfo从依赖注入容器里取出或创建Controller实例。处理Controller的构造函数参数。如果你的Controller有构造函数依赖这个步骤会从IServiceProvider里解析依赖。把请求数据和RouteData转换成Action参数。执行过滤器管道最终调用Action方法本体。需要特别强调一点在MVC里路由匹配和Action调用不是连续发生的。路由匹配在UseRouting中间件里就完成了但Action的调用要等到管道推进到EndpointMiddleware才发生。中间的喘口气就是你能插入自定义逻辑的窗口期。比如你可以写一个认证中间件放到UseRouting和MapControllers之间这样在调用任何Controller之前先检查身份。这也是认证系统在MVC里最标准的挂载方式。3.2 Model Binding如何把请求数据喂给Action参数Model Binding模型绑定是所有MVC开发者迟早要深入理解的一块也是inbound里最实用、最容易出问题的环节。数据源优先级Model Binding按顺序从以下位置取值Form表单域application/x-www-form-urlencoded或multipart/form-data的POST请求路由值RouteData.Values也就是URL模板里{id}这种占位符的值查询字符串?id123请求头除非你显式指定[FromHeader]为什么是这个顺序这是微软当时为了符合Web表单时代的认知惯性定的正式地说大多数传统Web应用POST的数据优先级确实应该高于URL携带的数据。但放在现代API开发里这往往不是我们想要的——比如一个GET接口id既能通过路由传也能通过QueryString传框架默认先取路由值这其实非常合理因为路由值是用户直接访问URL到达的“主路径”而QueryString多数是附加参数。绑定目标模型绑定可以绑定到三种目标上简单类型参数int idstring name复杂类型参数OrderDto order框架会把数据源的键值对一一映射到DTO属性上数组和集合Listintstring[]需要数据源提供重复键或索引键自定义绑定当内置绑定不满足时比如你要从JWT里取某个字段映射到参数可以写一个自定义IModelBinder或者用[ModelBinder(Name xxx)]来强制指定数据源。我在实际项目中就遇到过对方接口把订单号放在请求头X-Order-No里业务层又强烈要求以参数形式接收最终就是靠[FromHeader]解决的。public IActionResult GetOrder([FromHeader(Name X-Order-No)] string orderNo) { // ... }绑定失败的细节框架对绑定失败的默认行为是给参数赋默认值并不会报错。所以int id绑不到时是0string name绑不到时是null。这就是为什么有些接口你参数漏了它不报400而是正常执行了奇怪逻辑。要严格校验可以给参数加[Required]或者检查ModelState.IsValid。3.3 过滤器流水线与Action执行Model Binding完成框架还不会立刻执行你的Action方法它会先跑一遍过滤器管道。过滤器是MVC里一个非常强大的AOP扩展点也是整个inbound链条上“框架代码”和“你的代码”之间最清晰的分界线。MVC过滤器按执行顺序排列如下| 过滤器类型 | 执行时机 | 常见用途 | |----------|发明时机不够精确修正 | |---------|--------|----------| |IAuthorizationFilter| 最早甚至在Model Binding前 | 登录校验、权限校验 | |IResourceFilter| 授权后、模型绑定前 | 缓存、请求日志 | |IActionFilter| 模型绑定后、Action执行前/后 | 日志、输入校验、事务 | |IExceptionFilter| 异常抛出后 | 全局异常处理 | |IResultFilter| Action返回后、Result执行前/后 | 统一包装响应、Response头注入 |你看到这里一定会发现过滤器其实和中间件有些相似都能在请求处理的不同阶段介入。但两者最大的不同是中间件在路由之前就能介入过滤器必须在路由匹配和Controller激活之后才能跑。也就是说过滤器能拿到的上下文信息更丰富比如已经绑定好的模型、已经激活的Controller实例而中间件拿不到这些。实际写项目时我经常把两种技术搭配用全局的、跟具体业务无关的比如API响应格式统一、跨域处理放中间件跟某个具体Controller或Action耦合的比如某几个接口需要特定权限放过滤器。这样的分界清晰且容易维护。3.4 构造函数注入与控制器的实例化很多新手对“为什么Controller可以构造函数里直接拿服务实例”有疑惑这里顺带讲清楚Controller实例是由MVC框架通过依赖注入容器创建的不是你自己new出来的。在inbound的“激活Controller”环节框架会从ControllerActionDescriptor拿到Controller类型。请求IServiceProvider解析该Controller类型。此时如果构造函数有参数框架会尝试从容器里一个个解析如果你没在builder.Services里注册这些依赖就会抛异常。Controller实例化后被塞进ControllerContext供后续Action执行使用。这里有个真实的坑如果某个依赖在构造函数里注入了但它本身又有非常重的初始化工作那么每一个进入该Controller的请求都会触发一次完整的依赖初始化包括DbContext、HttpClient这些。性能敏感的项目要考虑作用域和生命周期设置。比如DbContext在ASP.NET Core中默认是Scoped一个请求内复用同一个实例这没问题但如果你不小心把某个重量级服务注册成了Singleton内部又持有DbContext那就是串数据的大事故。Controller的实例化过程不是每篇教程都会讲到但它恰恰是你排查“为什么请求很快/很慢”时的一个重要切入点。4. 实操记录自己在Demo项目里完整走一遍入站过程4.1 搭建一个能看到MVC入站路径的Demo光讲理论记不住这里我带你实际看一遍。打开终端创建一个空的ASP.NET Core Web API项目我用的是.NET 8 SDK然后写一个最简单的Controllerdotnet new webapi -minimal -n InboundDemo cd InboundDemo再创建一个OrderController[ApiController] [Route(api/[controller])] public class OrderController : ControllerBase { private readonly ILoggerOrderController _logger; public OrderController(ILoggerOrderController logger) { _logger logger; } [HttpGet({id:int})] public IActionResult GetOrder(int id) { _logger.LogInformation(Action执行调用GetOrderid{Id}, id); return Ok(new { Id id, Name 测试订单 }); } }启动项目后访问https://localhost:5001/api/order/42然后打开控制台窗口看日志。你会发现框架自动输出了很多日志其中包括路由匹配信息。但日志还是不够直观我们更进一步在管道里插两个探针中间件分别放在UseRouting前和MapControllers前app.Use(async (context, next) { if (context.Request.Path.StartsWithSegments(/api)) { Console.WriteLine($[M1] 请求刚进入管道Path{context.Request.Path}); Console.WriteLine($[M1] 此时RouteValues是否为空{context.Request.RouteValues.Count 0}); } await next(); }); app.UseRouting(); app.MapControllers(); app.Use(async (context, next) { if (context.Request.Path.StartsWithSegments(/api)) { Console.WriteLine($[M2] MapControllers前RouteValues是否为空{context.Request.RouteValues.Count 0}); Console.WriteLine($[M2] 路由匹配出的Endpoint{context.GetEndpoint()?.DisplayName}); } await next(); });访问一次/api/order/42控制台会显示[M1] 请求刚进入管道Path/api/order/42 [M1] 此时RouteValues是否为空True [M2] MapControllers前RouteValues是否为空False [M2] 路由匹配出的EndpointOrderController.GetOrder (InboundDemo)看到没有**在UseRouting之前RouteValues是空的在MapControllers之前RouteValues已经填好了Endpoint也已经指定到了OrderController.GetOrder。**这就是inbound过程最直观的证据路由匹配发生在UseRouting中间件里而不是在MapControllers里。MapControllers只负责“注册路由模板”真正的匹配动作在管道流转时发生。4.2 看Model Binding在什么时候真正把参数设置好再进一步我们看看Model Binding到底在哪一步生效。修改GetOrder方法加上一段日志[HttpGet({id:int})] public IActionResult GetOrder(int id) { // 此时框架已完成了模型绑定id已经有值 Console.WriteLine($[Action] 进入Action时id{id}); return Ok(new { Id id, Name 测试订单 }); }访问/api/order/35完整日志链[M1] 请求刚进入管道Path/api/order/35 [M1] 此时RouteValues是否为空True [M2] MapControllers前RouteValues是否为空False [M2] 路由匹配出的EndpointOrderController.GetOrder (InboundDemo) [Action] 进入Action时id35结合前面讲过的流程你现在可以对上号了请求进入管道时RouteValues为空UseRouting中间件执行后RouteValues被填充Endpoint被选中然后在EndpointMiddleware内部MVC框架拿到了Endpoint信息找到OrderController类型激活Controller实例执行Model Binding把URL路径中的35赋值给id最后才进入你的Action方法。如果想让模型绑定的过程更透明你还可以在Controller构造函数里打断点或者重写这个Controller的OnActionExecuting方法打印ModelState里已经绑定的键值。这个顺序一旦打通很多怪异表现都能解释清楚。5. 踩坑实录入站环节最容易翻车的几个位置5.1 请求404路由匹配说“我不认识”404是最经典的inbound问题但导致404的根因可能藏在多处路由模板没匹配上模板是{controller}/{action}/{id?}你访问了/api/order/GetOrder/42但Controller上没有GetOrder这个无特性的Action或者你只在Controller上写了[Route(api/[controller])]子路径没对上。约束不满足你访问了/api/order/abc但Action参数是int id且路由模板要求{id:int}匹配直接失败。HTTP方法不对你的Action有[HttpGet]但发了个POST请求此时ActionSelector会剔除这个候选最终候选集为空返回404。Controller不是publicController类必须是非密封的public类。如果Controller被定义成internal或private路由会发现不了它。排查这类问题最简单高效的方式是启动时开路由诊断app.UseDeveloperExceptionPage();并且设置builder.Logging.AddConsole()的日志级别为Trace然后访问请求看路由日志输出。如果是生产环境还可以用EndpointDataSource把项目里所有已注册的Endpoint列出来看一遍确认自己Action的路由模板到底注册成了什么样。5.2 静态文件拦截请求根本没走到MVC我见过最让人头疼的404其实是静态文件中间件惹的祸。UseStaticFiles如果放在管道的最前面它会拦截所有到wwwroot目录下文件的请求。当你的API路径和某个文件名恰好重合时请求就永远到不了MVC。这个问题的高发场景是你在wwwroot下放了个order.json之类的文件同时Controller又暴露了/order这样的路由结果请求全被静态文件中间件截胡了Controller怎么都执行不到。解决方式很简单把UseStaticFiles严格限定目录比如只放wwwroot/assets下的资源其他路径一律放行或者把UseStaticFiles放在UseRouting之后这样路由先判断当前请求是否能匹配MVC端点能匹配就直接跳过静态文件处理。默认模板里静态文件在UseRouting之前这在纯前端项目里没问题但如果你做的是半接口半静态资源的混合应用这个顺序值得重新审视。5.3 管道顺序乱套用了了不起作用的中间件中间件管道的执行顺序完全由添加顺序决定这个“先到先得”的规则很多人都知道但踩坑的还是不少。典型场景把UseAuthentication写在MapControllers之后结果认证完全没执行请求直接冲到Action里。把UseHttpsRedirection放在自定义日志中间件后面导致日志里记录的请求还是HTTP未跳转前的状态。把异常处理中间件写在管道末尾等于没写因为异常永远先冒泡到你后面代码的前面。再结合inbound路径说一次UseRouting之前的中间件看到的RouteValues几乎为空MapControllers之后的中间件如果在常规请求处理流程里Endpoint已经执行完毕HttpContext.Response可能已经开始写出这时如果试图修改Response可能已经来不及。规范做法是认证授权类中间件在UseRouting和MapControllers之间业务无关的日志、监控、异常处理尽量放最前面业务相关的转换、验证放过滤器里而不是中间件里。这样既不会拿不到路由信息也不会干扰后置管道的正常响应。5.4 方法签名与模型绑定不匹配Action总是“无效参数”还有一种特别冤枉的坑就是Action方法签名上有个参数但模型绑定怎么都绑不上值结果方法拿到的是默认值。原因通常有两种第一参数名称和路由模板占位符对不上。比如路由是api/order/{id}但你的Action参数叫orderId模型绑定从路由值里找orderId找不到最后给你一个0。框架默认通过参数名来匹配数据源不会自动做“驼峰名转kebab-case”或者“id和orderId的语义转换”。解决办法要么改参数名要么用[FromRoute(Name id)]显式指定。public IActionResult GetOrder([FromRoute(Name id)] int orderId)第二POST接口忘了[FromBody]。默认情况下简单类型参数int、string会优先从路由值和QueryString取不会从请求体取。你把JSON放进请求体但方法签名是public IActionResult CreateOrder([FromBody] OrderDto dto)你才拿得到如果签名是public IActionResult CreateOrder(OrderDto dto)框架会尝试从Form、路由值、QueryString里匹配DTO属性匹配不到就全是null或默认值。所以写API接口时建议给复杂类型参数显式标注[FromBody]给简单类型参数不要过度依赖自动绑定——这是我对所有组员的硬性要求。顺手还能避免[ApiController]模式下框架自动启用复杂类型参数从Body绑定而引发的歧义。6. 性能与扩展入站链路的调优机会6.1 路由匹配的性能开销路由匹配在ASP.NET Core中的实现是经过高度优化的DfaMatcher确定性有限自动机。框架会把你项目里所有路由模板编译成一个DFA匹配时走状态机所以即使你有成百上千个Endpoint匹配过程依然是高效的。但有一点要注意每一次请求都会走一遍路由匹配即使URL完全一样。也就是说UseRouting不是把结果缓存下来然后复用它是按请求实时计算的。所以如果你的路由模板数量爆炸、约束复杂匹配时间会线性增长。虽然通常不会成为瓶颈但在极端的场景下比如单机每天几亿次请求路由匹配的热点路径是值得用基准测试量一量的。优化方向有三个减少不必要的约束正则能用int、guid这种内置约束就不用自定义正则。尽量使用属性路由让每个模板都尽量精确减少模板重叠和回溯。避免通配符路由比如{**slug}它会让DFA的构建和匹配都变复杂。6.2 自定义中间件与端点的扩展能力理解了inbound的顺序你就可以像搭积木一样在管道里插各种自定义行为。比如我做过的两个真实扩展第一个是租户解析中间件。我们系统是多租户SaaS每个租户有独立的数据库。请求进来时从子域或者请求头里提取租户标识然后赋值给AsyncLocal或者请求的Items字典后续的DbContext、缓存服务都根据这个标识选择对应实例。这个中间件放在UseRouting之前因为它在路由前就需要拿到Context信息。第二个是操作日志的Filter。我们用IActionFilter在OnActionExecuting里记录入参在OnActionExecuted里记录出参和耗时顺便统一把异常包装成特定格式的响应。因为过滤器能拿到ActionArguments所以比中间件更容易获取“这个请求调用了哪个Action用了什么参数”日志质量比单纯中间件高出几个量级。这两个扩展都是围绕inbound链路做的它们的共同点是你得先知道整条链路里每个节点的先后顺序、能拿到什么数据才能选对插入点。中间件、过滤器、路由约束、模型绑定器各有擅长选对了代码干净高效选错了就是无穷无尽的心智负担。7. 体会理解inbound是MVC进阶的真正门槛最后说点个人体会。第一次系统理清MVC入站流程后我最大的感受不是“会了路由”或者“会了模型绑定”而是看待框架的方式变了——你再也不会觉得它是黑盒不会因为一个请求没进到Action就慌得无从下手。你会在心里过一遍链路端口解析、中间件管道、路由匹配、端点激活、模型绑定、过滤器、Action执行、Result执行。哪一段出了问题你应该去哪里找线索、打什么日志、看什么状态一目了然。而且这个认知不局限于ASP.NET Core MVC你去看其他Web框架无论是Spring MVC还是Express本质上都有类似的“接收请求、路由分发、参数解析、逻辑执行”四段结构。只是不同框架的中间件管道实现细节不一样核心思路高度一致。一旦你吃透了一个框架的inbound过程其他框架也会变得更容易理解和上手。如果你现在还在为某个请求为什么404、某个参数为什么绑不上、某个过滤器为什么没执行而困惑建议别急着在网上搜“具体报错解决办法”先静下心把这条入站链路自己在Demo里走一遍。等你能准确说出“请求从URL进入在UseRouting里匹配到Endpoint在EndpointMiddleware里激活Controller并执行模型绑定最后在过滤器管道中进入Action”这个链条时你已经和“只会写接口”的初级水平拉开差距了。这也是我个人认为的MVC进阶真正的门槛所在。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频 2026/9/30 23:59:44

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证 2026/9/30 23:59:36

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MCP Kubernetes Server 实战:用 TaoToken 统一 Key 打通集群管理工具链 2026/9/30 23:59:30

MCP Kubernetes Server 实战:用 TaoToken 统一 Key 打通集群管理工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置) 2026/9/30 23:59:30

2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱 2026/9/30 23:59:23

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱Bilibili 同步视频游戏逻辑 vs 游戏引擎,剧本和摄影机的区别现代游戏引擎都包含哪些模块?游戏编辑器:游戏开发者的工作台数学,游戏引擎的内功根基需要重点掌握的数学知…

阅读更多 →
中科院青藏高原所李新团队提出 READY 框架|地学数据光“开放共享”还不够,得先过“AI 就绪”这道关 2026/9/30 23:59:23

中科院青藏高原所李新团队提出 READY 框架|地学数据光“开放共享”还不够,得先过“AI 就绪”这道关

近日,中国科学院青藏高原研究所、国家青藏高原科学数据中心联合国内多个地学数据中心科研人员,系统提出了“人工智能就绪地球科学数据(AI-ready geoscience data)”的定义框架与实现路径。当前,“人工智能就绪数据&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉