部署到IIS后,对控制器的API调用正在中断

时间:2018-02-21 05:13:07

标签: c# jquery asp.net-mvc asp.net-web-api web-deployment

我正在调用API调用以使用javascript从服务器获取JSON数据。

$(function () {

    var customersTable = $('#Customers');
    var returnCustomersTable = UpdateDataTable(customersTable, "/Customers/Loaddata");
}

当我使用Visual Studio Dev环境时,这工作正常,因为我的Web应用程序是root用户,因此所有javascripts工作正常。

示例:

我的网站网址 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调用时附加。

但我在想是否有其他办法。

1 个答案:

答案 0 :(得分: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网站root中运行的应用程序:

/Customers/Loaddata

在配置为名为“MyAppName”的IIS应用程序的虚拟子目录中运行的应用程序:

/MyAppName/Customers/Loaddata