【问题标题】:ASP.NET MVC 4 - posting JSON data from any page on the client side to the serverASP.NET MVC 4 - 从客户端的任何页面发布 JSON 数据到服务器
【发布时间】:2013-09-21 02:08:03
【问题描述】:

我需要将 JSON 数据从客户端发布到应用程序 ASP.NET MVC 4,但 javascript 代码由用户运行并将数据从网站 www.lotsalneschs.com 传输到我的服务器。为了进行测试,我使用了 Google Chrome 控制台面板。 控制器代码:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public JsonResult Save(List<NewsModel> items)
    {
        return Json(null);
    }
}

public class NewsModel
{
    public string Title { get; set; }

    public string Content { get; set; }

    public List<string> Tags { get; set; }
}

Javascript 代码:

function News() {
    var arr = {};
    var title = "items";
    var tTitle = "Title";
    var cTitle = "Content";
    var tgTitle = "Tags";
    arr[title] = [];
    for (var i = 0; i < 10; i++) {
        var n = {};
        n[tTitle] = "Title №" + i;
        n[cTitle] = "TEXT";
        n[tgTitle] = [];
        for (var j = 0; j < 5; j++) {
            n[tgTitle].push("tag" + j);
        }
        arr[title].push(n);
    }
    return arr;
}
var news = News();
$.ajax({
    url: 'http://localhost:28369/Home/Save',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
    data: JSON.stringify(news)
});

如果我在页面 localhost:28369/Home/Index 上执行脚本,一切正常:

http://i.stack.imgur.com/RL1nR.png

  但是在任何其他页面(例如 stackoverflow.com)上执行此脚本不会在同一断点处中断。 如果我在脚本中删除 contentType,得到以下内容:

http://i.stack.imgur.com/4Hcyn.png

如果我删除 contentType 并且不使用 JSON.stringify 来格式化我的数据,请获取以下内容:

http://i.stack.imgur.com/F1Ql7.png

如何解决这个问题?

【问题讨论】:

    标签: asp.net-mvc json asp.net-mvc-4


    【解决方案1】:

    我认为这与您的 URL 被硬编码到本地主机有关。换行试试

    url: 'http://localhost:28369/Home/Save',
    

    url: '@Url.Action("Save", "Home")',
    

    编辑:

    考虑一下,您应该会看到 Url.Action 生成了什么路径。我认为问题是从另一台服务器运行的,本地主机指向该服务器而不是您的计算机。如果 Url.Action 不起作用,那么您应该将其指向一个面向公众的地址。

    【讨论】:

    • 我的 javascript 代码不属于 ASP.NET MVC 4 应用程序。我自己在控制台 Google Chrome 中运行它,因为我无法使用 @Url.Action("Save", "Home")。
    • 我需要在不属于我的 ASP.NET MVC 4 应用程序的任何页面上发布 JSON 数据
    • 我认为您遇到的问题与您的返回 url 是本地主机有关。这只会指向您正在运行脚本的服务器,而不是您的计算机。您需要将该返回 url 更改为远程服务器可以看到的服务器上的地址。 yourdomain.com/save 类似的东西
    • 我是这么想的,但最后我向同一台计算机上的服务器发送了一个请求。所有关于服务器不可用的疑虑都消失了,我托管了我的 ASP.NET MVC 4 应用程序。因此,在脚本中,我将 url 更改为我的公共网站地址。什么都没有改变。如果我在页面 /Home/Index 上运行脚本,则接收到的数据格式正确。如果我在页面stackoverflow.com 上运行脚本,则没有任何反应。
    • 我正在开发一个谷歌浏览器扩展程序,它将数据从特定网页发送到我的服务器。我读过 XMLHttpRequest 的请求只能向与当前页面具有相同协议、域、端口的地址发出。但是如果我在删除脚本参数 contentType 后在页面 stackoverflow.com 上运行脚本,则在服务器上接收到数据,但无法正确反序列化数据并且 List items 等于 null。
    猜你喜欢
    • 2016-07-02
    • 2015-07-09
    • 2016-04-17
    • 2013-07-27
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多