【问题标题】:I can't call Controller Action via Ajax Post我无法通过 Ajax Post 调用控制器操作
【发布时间】:2021-06-16 14:25:48
【问题描述】:

我对本地和已发布的 Web 项目差异有一些疑问。我有一个 .net core mvc 项目,我尝试将物理保存文件保存在控制器中。我从文件选择器获取文件,然后传递我的 FileModel。 但是在本地一切都很好,我可以访问控制器而不是保存文件,但是在服务器上发布后,我尝试上传文件我无法访问控制器方法。

我的 ajax 代码在这里:(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!");}
             }

文件更新控制器.cs

        [HttpPost]
        public JsonResult SavePhysicalPath(FileModel model)
        {
...
...
some code
...
        }

İn 本地一切正常,我得到控制台日志成功! , 但已发布:(我的网站 www url)/MyProject/FileUpdate/SavePhysicalPath 404 Not Found。

我该如何解决这个问题?

【问题讨论】:

  • 嗨@hkyaaa,404 表示请求的url 不正确,请检查url:url:"SavePhysicalPath",
  • 嗨@Rena,这个网址在本地工作并发布,但在我的网站上为什么无法访问?
  • 嗨@hkyaaa,您使用的是完整网址,而不仅仅是操作名称。可能您使用 url 重写所以找不到您的操作。你应该使用url:"www.yoursite.com/FileUpdate/SavePhysicalPath"
  • 或者只是url: '/FileUpdate/SavePhysicalPath'
  • 很遗憾仍然无法工作 404

标签: c# ajax asp.net-mvc asp.net-mvc-4 model-view-controller


【解决方案1】:

由于您的网站位于 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"),

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2020-10-13
    • 2014-03-27
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多