如何使用ajax返回一个“fail”请求?

9 浏览
0 Comments

如何使用ajax返回一个“fail”请求?

我正在学习使用jQuery的Web API。

这是我编写的用于进行Post请求的插件:

$.postAPI = function (url, data) {
    let defer = $.Deferred();
    let onSuccess = function (data) {
        defer.resolve(data);
    };
    let onError = function (error) {
        defer.reject(error);
    };
    $.ajax({
        url: url,
        method: 'POST',
        data: data || null
    }).done(onSuccess).fail(onError);
    return defer;
};

API控制器:

[Route("api/user")]
public class UserApiController : Controller
{
    [HttpPost("{userid?}")]
    public IActionResult GetData(string userid)
    {
        if (!string.IsNullOrEmpty(userid))
        {
            return Ok(userid);
        }
        return new StatusCodeResult(401);
        // 也可以尝试使用以下代码:
        // return BadRequest();
        // return Unauthorized();
    }
}

测试:

$.postAPI('/api/user/getdata').done(function (data) {
    console.log('success:', data);
}).fail(function (e) { console.log('fail:', e); });

但我始终得到以下日志:

success: getdata

我想使请求变为“失败”。所以日志可能是:

fail: ...

我的问题是:我该如何做到这一点?

更新:

我尝试添加了以下代码(基于评论):

Response.StatusCode = 404;

到该方法中,但问题没有解决。

快照:

[图片链接](https://i.stack.imgur.com/jUxz7.png)

0
0 Comments

问题的出现原因是:当使用Ajax请求时,如果没有提供正确的用户ID,则会返回状态码401,表示请求失败。

解决方法是:在服务器端的代码中,使用StatusCode(401)来返回状态码401,表示请求失败。这样,当没有提供正确的用户ID时,Ajax请求会收到一个失败的响应。

0
0 Comments

如何使用ajax返回一个“失败”请求?

问题的原因是,由于没有为该函数定义路由,如果您调用“api/user”,它将直接调用您的函数“GetData”。

在url api/user/getdata中,“getdata”部分将被解释为“userid”,因此if (!string.IsNullOrEmpty(userid))将始终返回true。

如果您调用“api/user”而没有“getdata”部分,它应该会失败。

如果您想继续使用getdata作为url,您可以为该函数添加一个路由,如下所示:

[HttpPost("GetData/{userId?}")]
public IActionResult GetData(string userid)
{
    if (!string.IsNullOrEmpty(userid))
    {
        return Ok(userid);
    }
    return BadRequest();
}

参见:

https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing

谢谢!它可以工作了。我还可以问另一个问题吗?在我将BadRequest更改为Unauthorized之后,为什么日志仍然显示404错误?图像:i.imgur.com/o4DNsns.png

我的意思是:状态码应该是401而不是404

可能是由于路由区分大小写:尝试[HttpPost("getdata/{userId?}")]

0