部署到 IIS 后,对控制器的 API 调用中断
Posted
技术标签:
【中文标题】部署到 IIS 后,对控制器的 API 调用中断【英文标题】:API Calls to controller is breaking after deploying to IIS 【发布时间】:2018-07-31 14:26:21 【问题描述】:我正在调用 API 调用以使用 javascript 从服务器获取 JSON 数据。
$(function ()
var customersTable = $('#Customers');
var returnCustomersTable = UpdateDataTable(customersTable, "/Customers/Loaddata");
当我使用 Visual Studio 开发环境时,这可以正常工作,因为我的 Web 应用程序在 root 上,所以所有 javascripts 都可以正常工作。
例子:
我的网站 URL: http://localhost:4391
API 调用将是: http://localhost:4391/Customers/Loaddata
这很好用。
但是当我将应用程序部署到 IIS 时,我的网站 URL 将是,
我的网站网址: http://localhost/MyAppName
但 API 调用仍然是,
API 调用将是:http://localhost/Customers/Loaddata
,这将导致找不到。
由于我在单独的文件中使用 javascript,我将无法执行 URL.Action
。
另一种选择是为 dev 和 prod 创建一个基本 URL,并在每个 servcie 调用中附加。
但我正在考虑是否有其他方法。
【问题讨论】:
单独的js文件没有区别。始终使用Url.Action()
生成您的网址。有很多方法可以做到这一点。例如,只需在主视图中添加一个全局 var url = '@Url.Action(...)
即可从插件中读取。或者,如果您要处理元素的事件,则在元素中添加一个data-url="@Url.Action(...)"
属性,该属性可以在外部文件中读取(使用var url = $(this).data('url');
)
这可能会对您有所帮助。 ***.com/questions/9703090/…
【参考方案1】:
ASP.NET MVC 中的路由配置旨在用作应用程序中的单一位置,可以维护所有 URL。
如果所有 URL 都是通过基于 UrlHelper
的方法之一(例如 Url.Action()
)使用路由生成的,而不是硬编码在控制器和视图中,这将大大有助于维护项目。
只要您的 JavaScript 在 MVC 视图中,您就可以解析 Url.Action
内联。
$(function ()
var customersTable = $('#Customers');
var returnCustomersTable = UpdateDataTable(customersTable,
'@Url.Action("Loaddata", "Customers")');
如果 JavaScript 位于 MVC 之外的单独文件中,请考虑通过变量或函数参数传递 URL。
这个路由特性也使得 ASP.NET MVC 的部署变得更加容易,因为当应用程序没有部署到根网站虚拟目录时,生成的 URL 会适应使用应用程序路径。
在 IIS 网站根目录中运行的应用程序:
/Customers/Loaddata
在配置为名为“MyAppName”的 IIS 应用程序的虚拟子目录中运行的应用程序:
/MyAppName/Customers/Loaddata
【讨论】:
以上是关于部署到 IIS 后,对控制器的 API 调用中断的主要内容,如果未能解决你的问题,请参考以下文章
Windows Server 2008 R2 升级之2016域控部署
ASP.NET Core api 项目 3.1 在 IIS 上发布
仅在 IIS 部署后的 Asp.net Web api 异常:名为“HelpPage_Default”的路由已在路由集合中