我无法通过 Ajax Post 调用 Controller Action
I can't call Controller Action via Ajax Post
我有一些关于本地和发布的网络项目差异的问题。我有一个 .net 核心 mvc 项目,我试图在控制器中保存物理保存文件。我从文件选择器获取文件然后传递我的 FileModel。
但是在本地一切都很好,我可以访问控制器而不是保存文件,但是在服务器上发布之后,比我尝试上传文件我无法访问控制器方法。
我的 ajax post 代码在这里:(FileUpdateIndex.cshtml)
if (form != null)
{
$.ajax({
url:"SavePhysicalPath",
type: 'POST',
data: form,
processData: false,
contentType: false,
success: function (result){console.log("success!");}
error: function (result){console.log("error!");}
}
FileUpdateController.cs
[HttpPost]
public JsonResult SavePhysicalPath(FileModel model)
{
...
...
some code
...
}
在本地一切正常,我获得控制台日志成功! ,
但已发布:(我的网站 www url)/MyProject/FileUpdate/SavePhysicalPath 404 未找到。
我该如何解决这个问题?
由于您的网站位于 MyProject,因此您必须将 MyProject 名称添加到 ajax url:
url:"/MyProject/FileUpdate/SavePhysicalPath",
或者您可以创建一个辅助函数:
function getUrl(controllerAction) {
var ca = controllerAction.split('/');
var pathArray = window.location.pathname.split('/');
if (pathArray[1].toLowerCase() != ca[1].toLowerCase()) return "/" + pathArray[1] + controllerAction;
return controllerAction;
}
在这种情况下,您可以将其用于 ajax 本地或生产 url,例如:
url:getUrl("/FileUpdate/SavePhysicalPath"),
只有当您有一级子文件夹时,此功能才能正常工作。如果您有两个或更多级别,则必须更正它。
我有一些关于本地和发布的网络项目差异的问题。我有一个 .net 核心 mvc 项目,我试图在控制器中保存物理保存文件。我从文件选择器获取文件然后传递我的 FileModel。 但是在本地一切都很好,我可以访问控制器而不是保存文件,但是在服务器上发布之后,比我尝试上传文件我无法访问控制器方法。
我的 ajax post 代码在这里:(FileUpdateIndex.cshtml)
if (form != null)
{
$.ajax({
url:"SavePhysicalPath",
type: 'POST',
data: form,
processData: false,
contentType: false,
success: function (result){console.log("success!");}
error: function (result){console.log("error!");}
}
FileUpdateController.cs
[HttpPost]
public JsonResult SavePhysicalPath(FileModel model)
{
...
...
some code
...
}
在本地一切正常,我获得控制台日志成功! , 但已发布:(我的网站 www url)/MyProject/FileUpdate/SavePhysicalPath 404 未找到。
我该如何解决这个问题?
由于您的网站位于 MyProject,因此您必须将 MyProject 名称添加到 ajax url:
url:"/MyProject/FileUpdate/SavePhysicalPath",
或者您可以创建一个辅助函数:
function getUrl(controllerAction) {
var ca = controllerAction.split('/');
var pathArray = window.location.pathname.split('/');
if (pathArray[1].toLowerCase() != ca[1].toLowerCase()) return "/" + pathArray[1] + controllerAction;
return controllerAction;
}
在这种情况下,您可以将其用于 ajax 本地或生产 url,例如:
url:getUrl("/FileUpdate/SavePhysicalPath"),
只有当您有一级子文件夹时,此功能才能正常工作。如果您有两个或更多级别,则必须更正它。