强制性的“这在我的开发环境中工作,但不工作在服务器上。”
我有一个使用ASP.NET 5 MVC项目(使用.NET Core ),在这个项目中,在某个视图上采取的操作会在我的javascript代码中触发一个"getJson“调用,这个调用反过来会调用控制器上的一个函数来从服务器获取数据,以便在没有回发的情况下更新页面。
在文本框中输入有效条目时,此函数将在我的javascript中调用:
function getCustomerOptions(cn) {
$.getJSON('/Home/GetBillingCustomerByCustNum', { cust: cn }, function (data) {
// handle returned json data
}
}..。它在我的家庭控制器中调用函数GetBillingCustomerByCustNum:
public async Task<JsonResult> GetBillingCustomerByCustNum(string cust)
{
var data = //[retrieve data from server thru repository function]
return Json(data);
}在我的开发环境中,这是很好的工作。但是,在我将应用程序发布到Windows Server 2016计算机上的IIS环境后,这将失败。看起来IIS试图调用'/Home/GetBillingCustomerByCustNum‘,就好像它是一个视图或一个物理对象,因此返回一个404错误。
我尝试修改我的getJson控制器调用jquery函数"getCustomerOptions“
<%= Url.Content("~/") %>这样呼叫就变成
$.getJSON('<%= Url.Content("~/") %>/Home/GetBillingCustomerByCustNum', { cust: cn }, function (data) { ...但这还是失败了。根据调试器控制台,上面的url被翻译为
http://localhost/HC_RFQ/Home/%3C%=%20Url.Content(%22~/%22)%20%%3E/Home/GetBillingCustomerByCustNum?cust=[given value]我唯一能找到的其他步骤是使用HTML助手准备我的url,如下所示:
var url = '@Url.Content("~/Home/GetBillingCustomerByCustNum/")'
$.getJSON(url, { cust: cn }, function (data) {...但是,这当然失败了,因为HTML助手不能在单独的javascript文件中工作。Var url按字面写的方式传入。
最后,我知道这不是我的javascript文件没有正确链接的情况,因为在这个失败的调用之前,我可以在调试器中断点我的javascript,并且在运行时命中断点。
我还能做什么来解决这个问题?如有任何建议,敬请见谅。
发布于 2022-06-23 13:59:39
您是否尝试过简单的Home/GetBillingCustomerByCustNum,而不需要启动/?从您如何描述生产中的错误来看,这基本上是一个服务器问题,当组成到控制器的最终路由时。
删除Home/部件是因为您从驻留在同一控制器文件夹路径上的视图调用该操作。由于您使用的是.NET核心,我建议使用asp-action和asp-controller标记帮助器,因为它们可以让服务器决定到所需方法的实际路由是什么,即使没有实际回发,也可以使用POSTing或GETing。例如,我使用javascript在表单上调用我的方法就是这样做的:
<form asp-controller="myController" asp-action="myAction">这就是我如何获得js代码来检索相应的url的方法。
let form = $(this).parents('form')[0];
let url = form.getAttribute('action');表单没有实际的submit按钮,因此调用都是从javascript发出的。
https://stackoverflow.com/questions/72720460
复制相似问题