我正在开发一个前端使用Angular 12和API中使用ASP. net core 5的应用程序。调用HttpPost API时,我收到错误加载资源失败:服务器响应状态为400()
如果我使用字符串或整数参数,则没有问题并且API被正确调用。但只有当我使用实体类传递值时,我才会收到此错误。
这是我的实体类在asp.net核心
public class FrontEnd
{
public class SendOTPReq
{
public string MobileNo { get; set; }
public string Email { get; set; }
public int Type { get; set; }
}
}
这是API
[Route("SendOTP")]
[HttpPost]
public async Task<object> SendOTP(SendOTPReq otpReq)
{
try
{
CommonApiResponse commonResponse = new CommonApiResponse();
if (!ModelState.IsValid)
{
return new APIResponse(406, "", ModelState.Select(t => new { t.Key, t.Value.Errors[0].ErrorMessage }));
}
var Result = await _IFrontEndRepository.SendOTP(otpReq);
if (Result != null)
{
commonResponse.Status = "Success";
commonResponse.ErrorMsg = "";
commonResponse.ResultData = Result;
return new APIResponse(200, "Request Success", commonResponse);
}
else
{
commonResponse.Status = "Failed";
commonResponse.ErrorMsg = Result.Message;
commonResponse.ResultData = Result;
return new APIResponse(204, "Request Failed", commonResponse);
}
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
这是我的角度分量。ts代码:
const otpReq = new SendOTPReq();
otpReq.MobileNo = this.registerForm.controls['phoneNo'].value;
otpReq.Email = this.registerForm.controls['email'].value;
otpReq.Type = 2; //2 is or email and 1 is for sms
this.accountsService.sendOTP(otpReq).subscribe(
(data) => {
//do stuff here
});
角度服务方式:
export class AccountsService {
constructor(private httpClient: HttpClient,
private _router: Router) { }
sendOTP(otpReq: SendOTPReq): Observable<SendOTPReq> {
debugger;
return this.httpClient.post<SendOTPReq>(environment.ApiUrl + 'FrontEnd/SendOTP', otpReq)
.pipe(
catchError(this.errorHandler),
);
}
errorHandler(error: { error: { message: string; }; status: undefined; message: any; }) {
debugger;
let errorMessage = '';
if (error.error instanceof ErrorEvent) {
// Get client-side error
errorMessage = error.error.message;
} else {
// Get server-side error
if(error.status == undefined)
{
errorMessage = "The server connection with the application is showing error. Close the application and restart again."
}else{
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
}
}
return throwError(errorMessage);
}
}
角度模型类:
export class SendOTPReq
{
MobileNo!:string;
Email!: string;
Type!: number;
}
出了什么问题?
尝试在API中添加[FromBody]装饰器,如下所示:
public async Task<object> SendOTP([FromBody]SendOTPReq otpReq)
更新:根据对这个和其他答案的评论,似乎设置了一些错误处理,并且在您的POST请求中更详细一点,这可能会进一步揭示问题的原因。假设您有我在API中描述的装饰器,让我们进一步增强API,重点是返回类型,以及使用RxJs在Angular中的服务函数,看看我们是否可以从中提取出更有用的响应。
为了清晰起见,总而言之,取消SendOtpReq类的嵌套:
public class SendOTPReq
{
public string MobileNo { get; set; }
public string Email { get; set; }
public int Type { get; set; }
}
接下来,我们将控制器POST方法的返回类型调整为IActionResult:
[Route("SendOTP")]
[HttpPost]
public async Task<IActionResult> SendOTP([FromBody]SendOTPReq otpReq)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
try
{
var Result = await _IFrontEndRepository.SendOTP(otpReq);
if (Result != null)
{
return Ok(Result);
}
return BadRequest($"Fail to POST");
}
catch (Exception ex)
{
return BadRequest($"Fail to POST");
}
}
现在,让我们使用角度服务观察API的整个响应,而不仅仅是主体:
public sendOTP(otpReq: SendOTPReq): Observable<HttpResponse<SendOTPReq>> {
return this.httpClient.post<SendOTPReq>(environment.ApiUrl +
'FrontEnd/SendOTP', otpReq { observe: "response" })
.pipe(
catchError(this.errorHandler),
);
}
所以,最后,我修复了它。一个接一个地注释属性和取消注释。当我从“mobileNo”字段获取数据时,我并没有将其转换为字符串。将手机号码转换为字符串有效。
我换了行:
otpReq.MobileNo = this.registerForm.controls['phoneNo'].value;
到
otpReq.MobileNo = this.registerForm.controls['phoneNo'].value.toString();
您的POST请求的返回类型错误。当角度httpClient要求返回SendOTPReq时,您不能让控制器返回对象。
所以相反你需要
return this.httpClient.post<MyActualReturnType>(environment.ApiUrl + 'FrontEnd/SendOTP', otpReq)
服务器js公司 应用程序。js公司 注册处理程序代码 当我试图注册一个用户时,我遇到了错误400。加载资源失败:服务器响应状态为400(错误请求),我已附加我的注册表。js文件寄存器。js:26个职位https://warm-earth-96837.herokuapp.com/register400(错误请求)寄存器。onSubmitSignIn@寄存器。js:26 400错误请求错误是一个HTT
我在Amplify中遇到了这个错误,我完成了构建tho。 该系统可以在本地环境中工作。包裹本地env的json脚本是这样的。 我的放大镜。xml如下。 屏幕完全倾斜了。 有没有人有同样的问题?
这是我第一次使用Sanity构建博客网站来练习使用React JS,在那里我应该从sanity.io.调用一个API,但是我的React网站无法从Sanity获取数据。在网页上应该从Sanity博客导入数据的区域实际上是一个空白屏幕。当我检查控制台时,我发现了这个错误: 这是我的网络负载 还有我的网络预览 这是本应显示信息的页面的代码 非常感谢你的帮助。谢谢
这是我第一次编写一个应用程序,其中我将后端链接到fornted(spring-boot-react)。 我已经到了这样的地步,我想从客户端视图中填写一个表单并提交它(在这种情况下,将表单保存到数据库中)。 我启动了服务器(spring boot中的应用程序)和客户端(react)。启动的应用程序已加载。表单会显示出来,但当我填写表单并单击“提交”时,不会执行任何操作。我使用devtools并得到错
我的代码工作正常,但当我试图从后端获取数据时,我收到一个错误“400错误请求”,我不知道发生了什么错误。请解决我的问题。 //API==http://localhost:8000/api/ 指数js公司 在这里,我分享了我的实际代码,其中添加操作被执行到表单中。js公司 $$$$$$$$$$$$$$$ 后端 $$$$$$$$$$$$$$$$$$$$$ 待办事项。js/路由器 待办事项。js/控制器
我正在制作一个博客应用程序。如果我尝试访问单个概要文件,微调器将继续运行,但当我签入react dev工具时,数据就在那里。我哪里出错了?其他一切都很好。配置文件是可见的,但当我进入单个配置文件时,问题就出现了 轮廓js公司 数据来自的源,配置文件。js公司 我的github回购链接
我在数据库中添加了一行上传图像。当我查看行列表时,会出现图像,但当我尝试更新行时,我遇到错误“加载资源失败:服务器响应状态为400:spring mvc”。图像未出现!! 谁能帮帮我!
我试图使用react fetch将json对象发送到spring控制器。但我有以下错误。加载资源失败:服务器响应状态为400(错误请求) 但是get方法可以成功调用。 http://localhost:8080/test/xx/getSprintTasks/${this.props.sprintNo}` 反应提取: 我的身体: 我还尝试了以下操作: 我的控制器: } 任务java: