C# 400对PUT调用的错误请求Asp Net Web Api 2.2

C# 400对PUT调用的错误请求Asp Net Web Api 2.2,c#,angular,asp.net-web-api,postman,C#,Angular,Asp.net Web Api,Postman,我正在尝试从Angular应用程序更新我的资源,使用PUT方法进行Web Api调用。出于某种原因,我只收到400个错误的请求,即使我尝试使用Postman执行同样的操作 因此,我有两个问题,第一个-如果考虑到web.config文件和控制台输出,下面的代码是正确的,第二个-我应该以某种方式配置IIS以允许PUT调用吗?所有东西都在IIS上运行,到目前为止,我在处理这个问题时遇到过blogpost,其中提到了类似这样的内容——我真的不知道应该改变什么。因为在我看来,我已经在我的web.confi

我正在尝试从Angular应用程序更新我的资源,使用PUT方法进行Web Api调用。出于某种原因,我只收到400个错误的请求,即使我尝试使用Postman执行同样的操作

因此,我有两个问题,第一个-如果考虑到web.config文件和控制台输出,下面的代码是正确的,第二个-我应该以某种方式配置IIS以允许PUT调用吗?所有东西都在IIS上运行,到目前为止,我在处理这个问题时遇到过blogpost,其中提到了类似这样的内容——我真的不知道应该改变什么。因为在我看来,我已经在我的web.config中删除了WebDAV

web.config


我的角度服务中的更新方法:

updateClient(客户端:任意){
console.log(客户端);
var obj=JSON.parse(客户端);
const headers=new-HttpHeaders().set('content-type','application/json');
变量体={
名称:obj['name'],
姓氏:obj[‘姓氏’],
电话:obj['phone'],
电子邮件:obj['email'],
Gymentriesleet:obj['Gymentriesleet'],
MARTIARTSENTRIESLEFT:obj['MARTIARTSENTRIESLEFT']
}
控制台日志(“ID”);
console.log(obj['id']);
控制台日志(“正文”);
log(JSON.stringify(body));
返回this.http.put(this.url+obj['id'],JSON.stringify(body),{headers}).pipe(
catchError(this.errorHandler)
);
}
角度分量(调用delete方法)

onFormSubmit(){
this.clientService.updateClient(this.clientById).subscribe(()=>{
这是getClients();
this.edit=false;
this.editRowId=null;
})
}
控制器方法:

//PUT:api/Clients/5
[HttpPut(“{id}”)]
公共异步任务PutClient(int-id,Client-Client)
{
if(id!=client.id)
{
返回请求();
}
_context.Entry(client.State=EntityState.Modified;
尝试
{
wait_context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
如果(!客户存在(id))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回NoContent();
}

似乎您只需将客户端id传递给请求主体,因为这就是操作中要检查的内容:

var body = {
  id: obj['id'],
  name: obj['name'],
  surname: obj['surname'],
  phone: obj['phone'],
  email: obj['email'],
  gymEntriesLeft: obj['gymEntriesLeft'], 
  martialArtsEntriesLeft: obj['martialArtsEntriesLeft'] 
}

似乎您只需将客户机id传递给请求主体,因为这就是操作中要检查的内容:

var body = {
  id: obj['id'],
  name: obj['name'],
  surname: obj['surname'],
  phone: obj['phone'],
  email: obj['email'],
  gymEntriesLeft: obj['gymEntriesLeft'], 
  martialArtsEntriesLeft: obj['martialArtsEntriesLeft'] 
}
已找到解决方案! 问题是在body中没有传递给PUT操作的ID。我在Visual Studio中通过发送邮递员请求对其进行了调试,很明显,它是用代码编写的-只有当传递的ID与对象的ID不同时,才会返回错误的请求。谢谢@AndriiLitvinov,我刚刚发现,当您发布评论时,您的解决方案是一种帮助

已找到解决方案!
问题是在body中没有传递给PUT操作的ID。我在Visual Studio中通过发送邮递员请求对其进行了调试,很明显,它是用代码编写的-只有当传递的ID与对象的ID不同时,才会返回错误的请求。谢谢@AndriiLitvinov,我刚刚发现,当您发布评论时,您的解决方案是一种帮助

如果您在操作中将
[FromRoute]
应用于
id
,将
[FromBody]
应用于
客户端
参数,会怎么样?或者将
[ApiController]
属性应用于控制器?没有任何帮助,无论是来自route/FromBody还是ApiController如果您尝试创建POST端点,会发生什么?如果你以控制台应用程序而不是IIS的形式运行该服务呢?@AndriiLitvinov,但是如何运行呢?您的意思是将put替换为post,并保持rest不变?是的,或者在控制器中创建另一个操作。只需查看IIS中的PUT方法配置是否存在问题,或者应用程序或客户端是否存在问题。如果您在操作中将
[FromRoute]
应用到
id
[FromBody]
应用到
客户端
参数会怎么样?或者将
[ApiController]
属性应用于控制器?没有任何帮助,无论是来自route/FromBody还是ApiController如果您尝试创建POST端点,会发生什么?如果你以控制台应用程序而不是IIS的形式运行该服务呢?@AndriiLitvinov,但是如何运行呢?您的意思是将put替换为post,并保持rest不变?是的,或者在控制器中创建另一个操作。只需查看问题是否出在IIS中的PUT方法配置或应用程序或客户端的其他方面。