IIS部署后Web API/MVC接口调用异常,本地运行正常
问题解决方法
核心原因是本地运行时应用处于站点根目录,而IIS部署在myapp虚拟目录下,应用根路径不一致导致硬写的路径出错。以下是统一适配两种环境的方案:
1. 修复Web API的Ajax调用路径
不要硬写带开头斜杠的绝对路径(/api/users)或单纯的相对路径(api/users),用框架提供的路径生成方法统一处理:
- 方法一:在页面中定义全局基础路径,供JS调用
<script> // 生成适配环境的API基础路径 var apiRoot = '@Url.Content("~/api/")'; </script>
之后Ajax请求直接拼接:
$.ajax({ url: apiRoot + 'users', // 其他请求配置 });
- 方法二:直接在Ajax配置中用Razor语法生成完整路径
$.ajax({ url: '@Url.Content("~/api/users")', // 其他请求配置 });
2. 关于@Url.Action()的路径差异
这是框架的正常行为,不需要修改:
- 本地根目录下,
@Url.Action("Action", "Controller")生成/Controller/Action,直接指向站点根下的Action - IIS虚拟目录下生成
myapp/Controller/Action,自动带上虚拟目录前缀,确保请求能正确路由到应用内的Action
这种差异是框架适配不同部署环境的正确表现,无需调整IIS配置。
3. 可选:用base标签统一相对路径解析
在页面的<head>中添加base标签,指定当前应用的根路径:
<base href="@Url.Content("~/")" />
之后页面中所有不带开头斜杠的相对路径(比如api/users、Home/Index)都会自动基于这个base路径解析,无需再逐个处理路径,同时兼容本地和IIS虚拟目录环境。
内容的提问来源于stack exchange,提问作者Dreidel
相关产品推荐
相关产品推荐

