【问题标题】:MVC4 model validation then submit JSON post to external URI using JQueryMVC 4 模型验证然后使用 JQuery 将 JSON 帖子提交到外部 URL
【发布时间】:2025-12-05 16:30:01
【问题描述】:

我需要提交一个简单的表单并验证模型。如果模型有效,我想序列化该模型并使用自定义标头通过 POST 将其发送到外部(https)Web 服务。最后,我将处理从请求中返回的响应并显示相应的消息。

我正在完美地验证来自控制器的模型并序列化对象,但似乎无法找到一种方法来创建对外部 URI 的 JSON 发布请求。有没有办法使用 JQuery.ajax 或 $.post 来做到这一点。也许我错过了一个关键的 ajax 参数来实现这一点。

谢谢

【问题讨论】:

  • 如果您已经将它传递给控制器​​并且模型已经过验证和序列化,那么您可以从控制器进行外部调用吗?为什么要使用ajax方式,这意味着您首先从控制器返回结果,然后再进行外部调用?
  • @von v. 一旦模型得到验证,我需要知道如何使用来自控制器的自定义标头创建请求。应处理响应并在表单上显示相应的消息(失败/成功)。
  • 如果您对控制器进行 ajax 发布,请验证对象,对其进行序列化并将其返回。因此,您可以将它用于将 ajax 发布到外部 URL,这是否满足您的要求?如果是,那么您还问如何在进行外部帖子之前包含自定义标题?
  • 这听起来正是我需要完成的。我需要从控制器添加自定义请求标头,然后使用 JSON 对象作为 requestBody 发布到外部 URL。处理请求并返回响应后,原始表单顶部会显示一条消息。
  • 如果那是“正是”您需要的,那么您将不会在控制器中执行此操作。请再次阅读我之前的评论。但我现在会试着回答你的问题。

标签: c# asp.net-mvc asp.net-mvc-4 visual-studio-2012


【解决方案1】:

因此,根据对问题的澄清,您可以这样做:

定义将验证对象的控制器方法

public ActionResult TestMethod() {
    // do server-side validation
    return Json(aValidObject);
}

您将 ajax 发布到您的控制器,这样您就可以验证您的模型,然后返回一个 json 结果。

$.ajax({
    url: '@Url.Action("TestMethod")',
    data: some_data,
    type: "post",        
    success: function (result) {
        // result is a valid json object
        doExternalPost(result);
    }
});

添加自定义标题并进行外部发布

function doExternalPost(o) {
    $.ajax({
        url: 'http://some_external_url',
        data: o,        
        dataType: 'json',
        beforeSend: function (xhr) {
            xhr.setRequestHeader('custom_header', 'some_value');
        },
        success: function() {
            // post is sucessful 
        },
        error: function (xhr, errorType, exception) {
            var errorMessage = exception || xhr.statusText || xhr.responseText;
            alert('An error has occured: ' + errorMessage);
        },
    });
}

【讨论】:

  • 这正是我所需要的。我试图从应用程序发出请求,这比它必须的要困难得多。谢谢!!
【解决方案2】:

试试这个

var data = {jsonDataObjectHere};

var request = $.ajax({
    url : 'externalUrl.com/something.whatever',
    type : 'POST',
    data : data // see above
});

request.success(function(response){
    // the response is the stuff from the server
});

我困了,请原谅错别字

祝你好运

编辑:为了澄清一点,使用 MVC 你真的不需要序列化 ​​json 对象,mvc 会按原样接受它。

【讨论】: