控制器名称随机添加到 URL

Controller name randomly gets added to URLs

我有一个名为 HomeController 的控制器 class 和 javascript 的客户端代码

function upload(content) {
    var ajax = new XMLHttpRequest();
    ajax.open("POST", 'UploadImage', false);
    ajax.setRequestHeader('Content-Type', 'application/upload');
    ajax.send(content);
}

有时使用 URL https://localhost/MyApp/Home/UploadImage 可以正常工作并上传数据。但有时它会失败,因为 URL 中没有控制器名称。 Chrome 开发人员工具将错误显示为:

POST https://localhost/MyApp/UploadImage 404 ()

但是如果我自己在URL中插入/Home,把上面的代码改成

    ajax.open("POST", 'Home/UploadImage', false);

然后有时它可以工作并使用 https://localhost/MyApp/Home/UploadImage 但有时会失败

POST https://localhost/MyApp/Home/Home/UploadImage 404 ()

如果我重新编译并重新开始,有时它会变成相反的行为,但我无法预测何时。 GET 请求也会发生同样的事情。我不知道是否应该在 URL 中包含控制器名称 Home/。我怎样才能让它表现一致?

UploadImage 是相对的 URL

location: localhost/MyApp/somepage.html => localhost/MyApp/UploadImage
location:  localhost/MyApp/Home/somepage.html => localhost/MyApp/Home/UploadImage

如果域不同

,则使用 /MyApp/Home/UploadImage 或完整 URL

这仅是由于亲戚 URL,

它会根据您使用的代码或页面而改变..所以解决方案是您选择

ajax.open("POST", '/Home/UploadImage', false);

ajax.open('POST', '@Url.Action("UploadImage","Home")', false);