这让我抓狂,我不知道问题出在哪里。我有一个由 Web API 组成的项目和另一个调用它们的项目(客户端)。这两个项目都是使用 VS 2022、.net 8 构建的。
以下是我的认证功能:
[AllowAnonymous]
[HttpPost("Authenticate")]
public async Task<UserLoginResponse> Authenticate(string lr)
{
UserLoginResponse resp = new UserLoginResponse { Success = false, ResultMessage = string.Empty, UserToken = "" };
UserSignIn usi = default;
if (string.IsNullOrEmpty(lr))
{
resp.Success = false;
resp.ResultCodes = LoginResponseCodes.UserNamePasswordRequired;
resp.UserToken = string.Empty;
return resp;
}
try
{
usi = JsonConvert.DeserializeObject<UserSignIn>(lr);
}
catch (Exception ex)
{
resp.Success = false;
resp.ResultCodes = LoginResponseCodes.UserNamePasswordRequired;
resp.UserToken = string.Empty;
return resp;
}
if (string.IsNullOrEmpty(usi.Email) || string.IsNullOrEmpty(usi.Password))
{
resp.Success = false;
resp.ResultMessage = "Valid User Name (email)/Password Required";
}
else
{
//resp = await _userService.Authenticate(usi);
//if(resp == null)
//{
// resp = new UserLoginResponse { Success = false, ResultMessage = "NULL Error", UserToken = "" };
//}
}
return resp;
}
下面是我尝试过的众多客户端变体之一,所有这些变体都会导致 StatusCode:400,ReasonPhrase:“错误请求”:
[AllowAnonymous]
[HttpPost("Authenticate")]
public async Task<UserLoginResponse> Authenticate(string lr)
{
UserLoginResponse resp = new UserLoginResponse { Success = false, ResultMessage = string.Empty, UserToken = "" };
UserSignIn usi = default;
if (string.IsNullOrEmpty(lr))
{
resp.Success = false;
resp.ResultCodes = LoginResponseCodes.UserNamePasswordRequired;
resp.UserToken = string.Empty;
return resp;
}
try
{
usi = JsonConvert.DeserializeObject<UserSignIn>(lr);
}
catch (Exception ex)
{
resp.Success = false;
resp.ResultCodes = LoginResponseCodes.UserNamePasswordRequired;
resp.UserToken = string.Empty;
return resp;
}
if (string.IsNullOrEmpty(usi.Email) || string.IsNullOrEmpty(usi.Password))
{
resp.Success = false;
resp.ResultMessage = "Valid User Name (email)/Password Required";
}
else
{
//resp = await _userService.Authenticate(usi);
//if(resp == null)
//{
// resp = new UserLoginResponse { Success = false, ResultMessage = "NULL Error", UserToken = "" };
//}
}
return resp;
}
任何地方都没有产生任何错误,至少我找不到。
如果我使用 Swagger 客户端测试我的 API 调用,它工作得很好。当我在 html 页面中使用以下 javascript 时,它也可以正常工作。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function CallWebApi() {
var url = "https://localhost:7598/api/BlueUsers/Authenticate?lr=%7B%22Email%22%3A%22testemail%40gmail.com%22%2C%22Password%22%3A%22hjgtdsrsdes%22%7D";
$.ajax({
url: url,
type: "POST",
success: function (data) {
console.log(data);
},
error: function (xhr, status, error) {
console.log(xhr.responseText);
}
});
}
CallWebApi();
有人可以帮助我解决我在 .net 客户端中缺少的内容和/或错误的操作吗?
谢谢你
您的问题缺少实际的 .NET 8 客户端代码,因此很难更具体,但我想到了一些提示:
lr
。您正在使用查询参数,因此添加 [FromQuery] 参数属性有助于框架确定该参数预计来自请求的查询部分。警告:如果我有 50 名代表,我会发布评论而不是答案。如果周围有版主,请随意将其移至评论中。