我无法通过 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"),

只有当您有一级子文件夹时,此功能才能正常工作。如果您有两个或更多级别,则必须更正它。