繁体   English   中英

AJAX调用异步任务 <string> 成功点击方法但返回失败

[英]AJAX call to async Task<string> successfully hit the method but returns failed

我有一个MVC控制器(不是api控制器) [HttpPost]方法public async Task<string> PostDocument()我正在从客户端进行ajax调用。 并且该方法正在对[HttpPost]方法PostDocument(DocRepoViewModel docRepo)进行另一个API调用。 以下是我的代码:

public async Task<string> PostAdminUploadData()
{
    HttpResponseMessage response = null;
    //set the parameter docRepo (a complex object)
    try {
        using (var client = new HttpClient())
        {
            string uri = documentRepositoryApiUrl + Constants.PostDoc;
            client.BaseAddress = new Uri(documentRepositoryApiUrl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            response = await client.PostAsJsonAsync(Constants.PostDoc, docRepo); //docRepo parameter for API method
        }
    }
    catch (Exception ex){}

    return (await response.Content.ReadAsAsync<string>());
}

现在在上面的代码中, response = await client.PostAsJsonAsync(Constants.PostDoc, docRepo); 代码片段将success返回到响应var(因为它按照我的预期执行)但是当上面的方法响应时,响应总是被捕获error:在ajax中我的ajax:

$.ajax({
    url: url,
    type: 'Post',
    data: data,
    cache: false,
    dataType: 'json',
    async: true,
    contentType: false,
    processData: false,
    success: function (data) {
        alert("pass");
    },
    error: function (data) {
        alert("field"); //always failed
    }
});

c#在任何地方都没有异常抛出。 请帮我解决问题

我遇到了类似的问题。 首先,更改您的ajax请求,以便删除dataType并指定contentType:

// dataType: "json",
contentType: "application/json",

然后,尝试将操作的返回类型更改为Task<ActionResult> ,并使用Controller上的常用方法之一,例如:

return Json(/* valid json string content */) 

要么

return Content(/* read content as a string here */)

原因是WebApi控制器获取了一个序列化层,将结果转换为客户端请求的格式。 相反,MVC控制器需要调用一种方法,该方法将某种动作结果(通常是视图或类似的东西)返回给视图引擎......

虽然我试图返回一个特定的模型,但我在JavaScript端收到的只是该对象Type的完全限定名称。

另一种选择可能是使用[AcceptAjax]属性或类似的东西来装饰你的动作,我相信这允许该动作回复ajax请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM