我在服务器上使用 C#/WebAPI,在客户端上使用 AngularJS。
给定 WebAPI Controller 上的 public void Delete(MyClass m)
方法和由值对象组成的类 MyClass
我该如何格式化 HTTP DELETE 请求使用 $http
而不在 C# 中指定属性(即 [FromUri]
?
这就是我使用分层对象而不是 ID 的原因:
我正在开发一个插件系统,我试图在花费的学习时间、编写时间和代码长度方面使消耗程序员尽可能简单。
本质上,插件系统将允许 CRUD 访问 EF 对象。在服务器上,我会让他们实现一个接口(interface),而我只想:
public interface IMyInterface<TEntity>
{
IEnumerable<TEntity> Get();
void Put(TEntity t);
void Post(TEntity t);
void Delete(TEntity t);
}
我现在正在客户端处理 Delete
,由于某种原因,在具体实现中没有 C# 属性的情况下无法映射复杂对象,例如 [FromUri]
。据我了解,属性不是从接口(interface)继承的,因此,如果我的客户端(AngularJS)执行类似 $http.delete('api/uri', { params: { objectToDelete } });
的属性将有必要使用参数来使删除工作正常进行。我也尝试过使用配置对象的 data
属性,但也没有用。我知道将 ID 作为 Delete
方法的参数是传统的/标准的,但如果这里存在这样的东西,那么客户端将需要知道什么构成了“键”——这更适用于消费程序员编写。
最佳答案
MyClass
是一个复杂的类型,从请求主体与 ASP.NET Web API 绑定(bind)。 HTTP 语义不允许 DELETE 的请求主体,因此,您将无法使用 Angular 发布带有 DELETE 的请求主体。确切地说,这不是 Angular 的问题,但大多数浏览器不会发送带有 AJAX DELETE 请求的正文。
关于c# - 如何让 WebAPI 在不使用 C# 属性的情况下接受复杂对象作为 DELETE HTTP 动词的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494962/