Chrome访问IIS Express运行的ASP.NET Core应用为何重复请求两次?如何避免?
解决Chrome在ASP.NET Core 2调试时重复发送两次请求的问题
我来帮你搞定这个Chrome重复发请求的问题,这种情况在ASP.NET Core 2搭配IIS Express调试的场景里真的挺常见,咱一步步排查解决:
1. 先排查是否是favicon.ico的自动请求
Chrome浏览器默认会自动请求网站的favicon.ico图标文件,如果你的项目根目录(wwwroot)里没有这个文件,或者页面里没指定它的路径,浏览器可能会发起额外的请求,看起来就像重复请求了当前页面。
- 解决办法:在
wwwroot文件夹里放一个favicon.ico文件,或者在你的布局页(比如_Layout.cshtml)的<head>里添加明确的引用:<link rel="icon" href="~/favicon.ico" type="image/x-icon" />
2. 检查IIS Express的协议与重定向配置
很多时候是HTTP/HTTPS重定向导致的“两次请求”:比如你调试时同时开启了HTTP和HTTPS,Chrome先访问HTTP地址,被服务器重定向到HTTPS,这就会产生两次请求记录。
- 解决办法:打开项目的
Properties/launchSettings.json,检查iisSettings和profiles里的配置,只启用一个协议(比如只保留HTTPS);或者确认Startup.cs里的UseHttpsRedirection中间件配置正确,避免循环重定向。
3. 检查页面中的无效资源引用
如果你的视图文件(比如.cshtml)里存在空的src或href属性(比如<img src="">、<link href="">),Chrome会把这个空路径解析为当前页面的URL,从而再次发起请求。
- 解决办法:仔细检查所有视图里的资源引用,确保每个路径都是有效的,没有空值。
4. 确认ASP.NET Core中间件的顺序是否正确
中间件的加载顺序直接影响请求处理流程,如果顺序错了,可能导致额外的跳转或请求。针对你的ASP.NET Core 2项目,Startup.cs里的Configure方法应该遵循这个基本顺序:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // 先处理HTTPS重定向 app.UseStaticFiles(); // 再处理静态文件 app.UseCookiePolicy(); app.UseMvc(routes => // 最后处理MVC路由 { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
5. 排查Chrome扩展程序的干扰
有些Chrome插件(比如广告拦截器、代理工具、甚至某些调试插件)可能会拦截或重复发送请求。
- 解决办法:切换到Chrome的隐身模式(Ctrl+Shift+N)再调试,如果隐身模式下没有重复请求,那就逐个禁用你的扩展程序,找到捣乱的那个。
另外看了你的csproj配置,使用的Microsoft.AspNetCore.All 2.0.6是稳定版本,版本本身不会导致这个问题,如果以上方法都没用,可以尝试升级到2.0.x分支的最新版本(不过ASP.NET Core 2.0已经停止官方支持了,长期来看建议升级到更高版本)。
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

