Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何表明Web API 2的成功?_C#_Ajax_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

C# 如何表明Web API 2的成功?

C# 如何表明Web API 2的成功?,c#,ajax,asp.net-web-api,asp.net-web-api2,C#,Ajax,Asp.net Web Api,Asp.net Web Api2,我正在向我的服务器发出修补程序请求以更新标题: $.ajax({ url: Settings.get('serverURL') + 'Playlist/UpdateTitle', type: 'PATCH', dataType: 'json', data: { id: model.get('id'), title: title }, success: function () { console.log

我正在向我的服务器发出修补程序请求以更新标题:

$.ajax({
    url: Settings.get('serverURL') + 'Playlist/UpdateTitle',
    type: 'PATCH',
    dataType: 'json',
    data: {
        id: model.get('id'),
        title: title
    },
    success: function () {
        console.log("Success!");
    },
    error: function (error) {
        console.error("Failure!");
    }
});

[Route("UpdateTitle")]
[HttpPatch]
public IHttpActionResult UpdateTitle(PlaylistDto playlistDto)
{
    using (ITransaction transaction = Session.BeginTransaction())
    {
        PlaylistManager.UpdateTitle(playlistDto.Id, playlistDto.Title);

        transaction.Commit();
    }

    return Ok();
}
除了执行ajax请求的错误回调而不是成功回调之外,一切都很好

在WebAPI2之前,我使用的是以下没有问题的方法。显然,问题是我返回的是Ok结果,而不是JSON success对象:

[HttpPost]
public JsonResult UpdateTitle(Guid playlistId, string title)
{
    using (ITransaction transaction = Session.BeginTransaction())
    {
        PlaylistManager.UpdateTitle(playlistId, title);

        transaction.Commit();
    }

    return Json(new
        {
            success = true
        });
}

表示web API 2成功的正确方法是什么?

返回HttpResponseMessage并将StatusCode设置为OK:

public HttpResponseMessage UpdateTitle() {
    ...
    return Request.CreateResponse(HttpStatusCode.OK);
}    

返回HttpResponseMessage并将StatusCode设置为OK:

public HttpResponseMessage UpdateTitle() {
    ...
    return Request.CreateResponse(HttpStatusCode.OK);
}    

问题其实很简单:

dataType: 'json',

告诉jQuery不要对服务器的响应类型使用智能猜测。如果服务器没有用json响应,它将抛出一个错误。如果我只是删除了该属性,那么一切都会正常工作。

问题其实很简单:

dataType: 'json',

告诉jQuery不要对服务器的响应类型使用智能猜测。如果服务器没有用json响应,它将抛出一个错误。如果我只是删除该属性,那么一切都会按预期进行。

但我认为在Web API 2中使用IHttpActionResult更合适。看到这个帖子:哦,事实上,你的解决方案并没有解决这个问题(哦,哇,我不知道新的HttpResponseMessage抽象。我以为Ok()是你写的东西。我假设他们的Ok()与我的答案相同。如果您仍然在执行错误回调,我猜问题不在api上,而在客户端。使用fiddler执行操作并查看响应-如果您重试OK,您应该得到200 OK()。这是我的javascript的一个错误。当服务器不发送任何数据时,我不应该表示我希望服务器有json响应。:)轻松!啊-我怎么也猜不到。不过这是一个很好的捕获,但我认为在WebAPI2中使用IHttpActionResult更合适。看到这个帖子:哦,事实上,你的解决方案并没有解决这个问题(哦,哇,我不知道新的HttpResponseMessage抽象。我以为Ok()是你写的东西。我假设他们的Ok()与我的答案相同。如果您仍然在执行错误回调,我猜问题不在api上,而在客户端。使用fiddler执行操作并查看响应-如果您重试OK,您应该得到200 OK()。这是我的javascript的一个错误。当服务器不发送任何数据时,我不应该表示我希望服务器有json响应。:)轻松!啊-我怎么也猜不到。不过捕捉得不错。如果不返回任何内容,最好使用状态代码204(无内容)。好主意!我会的!如果不返回任何内容,最好使用状态代码204(无内容)。好主意!我会的!