.Net 6 c# APi 和 Angular 之间的通信问题
Problem with comunication between .Net 6 c# APi and Angular
我在 .Net web 中有三个函数 api 在 .Net 6.
第一个:
[HttpPost("name/{name}")]
public async Task<ActionResult<Book>> PostOrder(string name, Book book)
{
try
{
var id = _context.Order.Where(el => el.User == name).Select(el => el.OrderID).FirstOrDefault();
if (id > 0)
{
book.OrderID = id;
_context.Book.Update(book);
await _context.SaveChangesAsync();
return book;
}
else
{
Order o = new()
{
User = name
};
_context.Order.Add(o);
await _context.SaveChangesAsync();
id = _context.Order.Where(el => el.User == name).Select(el => el.OrderID).FirstOrDefault();
book.OrderID = id;
_context.Book.Update(book);
await _context.SaveChangesAsync();
return book;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return NotFound();
}
}
第二和第三
[HttpPut("{id}")]
public async Task<IActionResult> PutUser(int id, User user)
{
if (id != user.id)
{
return BadRequest();
}
_context.Entry(user).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Users
[HttpPost]
public async Task<ActionResult<User>> PostUser(User user)
{
_context.User.Add(user);
await _context.SaveChangesAsync();
return CreatedAtAction("GetUser", new { id = user.id }, user);
}
我用来交流Angular:
第一:
addToOrder(user: string, book: Book): Observable<Book> {
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(this.orderUrl, book, this.httpOptions).pipe(
tap(_ => this.log(`added book to order for ${user}`)),
catchError(this.handleError<Book>('addToOrder'))
);
}
第二和第三:
updateUser(user: User): Observable<any> {
const url = `${this.usersUrl}/${user.id}`;
return this.http.put(url, user, this.httpOptions).pipe(
tap(_ => this.log(`updated users id=${user.id}`)),
catchError(this.handleError<any>('updateUser'))
);
}
addUser(user: User): Observable<User> {
return this.http.post<User>(this.usersUrl, user, this.httpOptions).pipe(
tap((newUser: User) => this.log(`added user w/ id=${newUser.id}`)),
catchError(this.handleError<User>('addUser'))
);
}
首先没有工作。没有与.Net 通信,错误的数据在哪里?我找不到任何。 Mayby 参数不正确。但是我没有看到。任何其他功能正常工作,我已经响应并在调试中请求服务器但在第一次请求时没有。仅在 POSTMAN 或 SWAGGER 中。
我在 Angular 上有订单:
getOrder(user: string): Observable<Book[]> {
const url = `${this.orderUrl}/name/${user}`;
return this.http.get<Book[]>(url)
.pipe(
tap(_ => this.log(`fetched order for name=${user}`)),
catchError(this.handleError<Book[]>('getBooks', []))
);
}
正在努力。
当我尝试使用 Postman 或 Swagger 时,我看到了响应。
P.S 当我从以下地址复制调试地址时:
const url = `${this.orderUrl}/name/${user}`;
并尝试在邮递员中添加 Book in JSON:
{
"bookID": 4,
"title": "string2",
"author": "strin2g",
"isbn": "stri2ng"
}
我已经回复了。
默认POST方法参数必须全部在请求体(FromBody
).
GET方法参数必须全部在请求查询中(FromUri
).
要更改此行为,您需要添加参数绑定。
变化
[HttpPost("name/{name}")]
public async Task<ActionResult<Book>> PostOrder(
[FromUri] string name,
[FromBody] Book book)
{
// CODE
}
好的。我有一个答案。我有一个:
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(this.orderUrl, book, this.httpOptions)
但必须是:
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(url, book, this.httpOptions)
问题的故事。我没注意到。
我在 .Net web 中有三个函数 api 在 .Net 6.
第一个:
[HttpPost("name/{name}")]
public async Task<ActionResult<Book>> PostOrder(string name, Book book)
{
try
{
var id = _context.Order.Where(el => el.User == name).Select(el => el.OrderID).FirstOrDefault();
if (id > 0)
{
book.OrderID = id;
_context.Book.Update(book);
await _context.SaveChangesAsync();
return book;
}
else
{
Order o = new()
{
User = name
};
_context.Order.Add(o);
await _context.SaveChangesAsync();
id = _context.Order.Where(el => el.User == name).Select(el => el.OrderID).FirstOrDefault();
book.OrderID = id;
_context.Book.Update(book);
await _context.SaveChangesAsync();
return book;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return NotFound();
}
}
第二和第三
[HttpPut("{id}")]
public async Task<IActionResult> PutUser(int id, User user)
{
if (id != user.id)
{
return BadRequest();
}
_context.Entry(user).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Users
[HttpPost]
public async Task<ActionResult<User>> PostUser(User user)
{
_context.User.Add(user);
await _context.SaveChangesAsync();
return CreatedAtAction("GetUser", new { id = user.id }, user);
}
我用来交流Angular: 第一:
addToOrder(user: string, book: Book): Observable<Book> {
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(this.orderUrl, book, this.httpOptions).pipe(
tap(_ => this.log(`added book to order for ${user}`)),
catchError(this.handleError<Book>('addToOrder'))
);
}
第二和第三:
updateUser(user: User): Observable<any> {
const url = `${this.usersUrl}/${user.id}`;
return this.http.put(url, user, this.httpOptions).pipe(
tap(_ => this.log(`updated users id=${user.id}`)),
catchError(this.handleError<any>('updateUser'))
);
}
addUser(user: User): Observable<User> {
return this.http.post<User>(this.usersUrl, user, this.httpOptions).pipe(
tap((newUser: User) => this.log(`added user w/ id=${newUser.id}`)),
catchError(this.handleError<User>('addUser'))
);
}
首先没有工作。没有与.Net 通信,错误的数据在哪里?我找不到任何。 Mayby 参数不正确。但是我没有看到。任何其他功能正常工作,我已经响应并在调试中请求服务器但在第一次请求时没有。仅在 POSTMAN 或 SWAGGER 中。
我在 Angular 上有订单:
getOrder(user: string): Observable<Book[]> {
const url = `${this.orderUrl}/name/${user}`;
return this.http.get<Book[]>(url)
.pipe(
tap(_ => this.log(`fetched order for name=${user}`)),
catchError(this.handleError<Book[]>('getBooks', []))
);
}
正在努力。
当我尝试使用 Postman 或 Swagger 时,我看到了响应。
P.S 当我从以下地址复制调试地址时:
const url = `${this.orderUrl}/name/${user}`;
并尝试在邮递员中添加 Book in JSON:
{
"bookID": 4,
"title": "string2",
"author": "strin2g",
"isbn": "stri2ng"
}
我已经回复了。
默认POST方法参数必须全部在请求体(FromBody
).
GET方法参数必须全部在请求查询中(FromUri
).
要更改此行为,您需要添加参数绑定。
变化
[HttpPost("name/{name}")]
public async Task<ActionResult<Book>> PostOrder(
[FromUri] string name,
[FromBody] Book book)
{
// CODE
}
好的。我有一个答案。我有一个:
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(this.orderUrl, book, this.httpOptions)
但必须是:
const url = `${this.orderUrl}/name/${user}`;
return this.http.post<Book>(url, book, this.httpOptions)
问题的故事。我没注意到。