部署.NET Core Web API至共享主机后访问失败求助
碰到这种访问失败的情况别着急,咱们从最基础的配置开始排查,这都是.NET Core API部署时常见的坑:
先核对路由注解是否正确
你的DataController和Tiles方法的路由配置得和访问路径匹配才行。举个标准的例子:[ApiController] [Route("api/[controller]")] // 这里会自动替换成api/data public class DataController : ControllerBase { [HttpGet("tiles")] // 拼接后就是api/data/tiles public IActionResult GetTiles() { // 你的业务逻辑 return Ok("请求成功"); } }要是你给方法用了自定义路由,比如
[Route("api/data/tiles")],一定要检查路径拼写,有没有多写、少写字符或者斜杠的问题。确认部署的是发布后的完整文件
别直接把项目源码传到服务器!得先在本地用dotnet publish -c Release命令生成发布包,里面包含web.config、API程序集、依赖库这些必要文件。上传的时候要把整个发布文件夹的内容都传到www.rosenet.om根目录,缺了web.config的话,IIS没法把请求转发给.NET Core进程,肯定会报资源找不到。检查服务器是否装了对应版本的.NET Core Runtime
服务器上必须安装和你项目目标框架一致的.NET Core Runtime(比如你用的是.NET 6,就装.NET 6 Runtime)。可以在服务器上打开命令行,运行dotnet --version看看已安装的版本,版本不匹配的话,API根本启动不起来,自然没法响应请求。查看应用日志找启动异常
要是API启动失败,会生成日志告诉你原因。你可以:- 看IIS的日志,一般在
C:\inetpub\logs\LogFiles目录里; - 也可以在你的API项目里配置日志输出到文件,这样能直接看到启动时的具体错误(比如数据库连不上、依赖注入出错之类的)。
- 看IIS的日志,一般在
核对IIS站点的配置
检查IIS里你的站点是不是指向了正确的根目录(就是你传文件的www.rosenet.om),还有应用程序池的.NET CLR版本要设成无托管代码——因为.NET Core是独立运行的,不需要IIS的托管环境。另外确认站点的HTTP绑定是正常的,端口80没被其他程序占用。先在本地测试排除代码问题
先在本地发布API,然后运行dotnet YourApiProject.dll,用http://localhost:5000/api/data/tiles测试能不能访问。如果本地没问题,那就是服务器部署的配置问题;如果本地也不行,那就是代码或者路由的问题,先把本地的问题解决了再部署。
内容的提问来源于stack exchange,提问作者user10239717

