ASP.NET Core拆分Views与Controllers同域名端口部署路由问题
解决方案
- 配置API应用路径基础
在API项目的Configure方法最开头添加以下代码,让框架识别IIS子应用的/api前缀,匹配路由时自动剥离该前缀:app.UsePathBase("/api"); - 修改Swagger配置为相对路径
去掉Swagger终结点路径的前置斜杠,改为相对路径,避免从站点根路径请求Swagger资源:app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json", "My API V1"); }); - 确认IIS子应用配置正确
- 打开IIS管理器,右键主站点选择「添加应用程序」
- 别名设置为
api,物理路径指向站点下的/Website/api目录 - 选择独立的应用程序池,托管模式设置为「无托管代码」,禁止和前端应用共用应用程序池
- 修正子应用web.config避免配置继承冲突
在/api目录下的web.config的<handlers>节点最开头添加移除配置,避免继承主站的handler配置导致冲突:<handlers> <remove name="aspNetCore"/> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers>
配置完成后重启主站点和API子应用的应用程序池即可,此时访问www.example.com/api/login可以正常请求接口,访问www.example.com/api/swagger也可以正常打开Swagger页面。
内容的提问来源于stack exchange,提问作者A Farmanbar
相关产品推荐
相关产品推荐

