繁体   English   中英

Javascript:使用 fetch 从 Web Api .Net 6 获取 BadRequest 错误

[英]Javascript: get a BadRequest error from a Web Api .Net 6 using fetch

我在使用 fetch 时遇到了一点麻烦,

这是javascript代码:

function loginJS() {
    const login = document.getElementById('login');

    const nome = document.getElementById('lnome');
    const pass = document.getElementById('lpass');

    const item = {
        Username: nome.value.trim(),
        Password: pass.value.trim()
    };

    fetch(uri, {
        credentials: 'include',
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(item)
    })
        .then(response => response.json())
        .then((res) => {
            //trying get the error (this if not work) , 400 is the code for bad request
            if (status = 400) {
                console.error(''); //HERE I HAVE THE PROBLEM
            }
            nome.value = '';
            pass.value = '';
            console.info('Login Success');
            window.location.href = url_1;
        })
        .catch(error => console.error('Unable to Login: ', error));
}

所以问题是从 Web API 控制器收到错误的请求,

例如,如果控制器给出 badRequest,它必须停止获取并且不给出“登录成功”

这是怎么做到的? 如果有更好的解决方案来解决这个错误(例如:使用 AJAX 而不是 fetch)。

欢迎任何帮助

Ps:警告此Javascript代码和Web API控制器代码如果没有badrequests正常工作

编辑

使用诸如退货之类的东西的回复; 我还有其他问题是我无法获得“状态”代码


.then((res) => {
            if (status == 400) {
                window.alert('ERRROOORR');
                return;
            }
            else if (status == 200) {
                nome.value = '';
                email.value = '';
                pass.value = '';
                window.alert('Register Sucess');
                document.getElementById('LoginCheck').click();
            } else {
                window.alert('Not making sense');
            }
        })

在上面的代码中,它给出了 'Not Making Sense' ,如何获得将真实状态传递给变量的状态的真实值?

收到状态码 400 后进入 if 语句,因为它是真的。 在那之后它可以自由离开,因为你不归还它。 现在,无论是真还是假,代码都会在 if 语句之后继续执行。

你应该实现这样的东西:

If (status == 400) {
    console.log("400 triggered");
    return;
}

您可能想要实现一种方法来告诉您的用户出了点问题,因为他们不会打开他们的控制台。

关于编辑

在下面的代码中,您将返回的值分配给res

.then((res) => {

res 在这种情况下很可能代表响应。 您应该通过在控制台中记录res来查看它返回的内容:

console.log(res)

这应该返回一个对象,其中包含许多关于response status的属性。 如果您能找到statuscode ,请四处看看。 此变量将替换status变量。

它将从此改变:

if (status == 400) {

对于这样的事情:

if (res.statusCode == 400) {

暂无
暂无

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

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