如何使用ajax返回一个“fail”请求?
如何使用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)
如何使用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?}")]