【问题标题】:How to return a "fail" request with ajax?如何使用ajax返回“失败”请求?
【发布时间】:2017-05-05 12:50:35
【问题描述】:

我正在用 jquery 学习 web api。

这是我发出帖子请求的插件:

$.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);

        // also try with
        // return BadRequest();
        // return Unauthorized();
    }
}

测试:

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

但我一直得到这个日志:

成功:获取数据

我想让请求变成fail。所以,日志可能是:

失败:...

我的问题:我该怎么做?

更新:

我尝试添加这一行(基于评论):

Response.StatusCode = 404;

到方法。但问题并没有解决。

快照:

【问题讨论】:

  • 如果您的请求失败(或出错),后端必须返回一个错误代码,如 404 或 500,我不确定 jQuery 是否可以模拟这一点。请尝试更改您的后端代码。
  • 你需要更改服务器返回的HTTP响应码不是200
  • @AgamBanga 我尝试添加Response.StatusCode = 404;,但仍然无法正常工作。我仍然得到相同的日志。
  • @foo 你能检查一下网络标签它在标签中显示的状态吗?
  • @silkfire 我用关键字asp net set response code 进行了搜索,但找不到解决方案。我该怎么办?

标签: jquery asp.net ajax


【解决方案1】:

如果你调用“api/user”,这将直接调用你的函数“GetData”,因为你没有定义函数的路由。

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

如果您在没有“getdata”部分的情况下调用“api/user”,它应该会失败。

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

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

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

【讨论】:

  • 谢谢!它正在工作。我可以再问一个问题吗?我把BadRequest改成Unauthorized后,为什么日志还是会抛出404错误?。图片:i.imgur.com/o4DNsns.png
  • 我的意思是:状态码应该是 401 而不是 404
  • 可能是路由区分大小写:试试[HttpPost("getdata/{userId?}")]
【解决方案2】:

试试这个:

[HttpPost("{userid?}")]
public IActionResult GetData(string userid)
{
    if (!string.IsNullOrEmpty(userid))
    {
        return View(new ViewModel(userid));
    }

    return StatusCode(401);
}

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 2015-06-22
    • 1970-01-01
    • 2017-04-02
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    相关资源
    最近更新 更多