c# - 如何让 WebAPI 在不使用 C# 属性的情况下接受复杂对象作为 DELETE HTTP 动词的参数?

标签 c# javascript angularjs asp.net-web-api

我在服务器上使用 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/

相关文章:

c# - 执行 ChartImg.axd 的子请求时出错。这不是重复的

javascript - Angular js - 返回一个带有 HTML 字符的字符串

javascript - 出现多个字段时的 jquery 时间输入问题

javascript - 动态谷歌图表配置

javascript - AngularJS window.close 不起作用

javascript - Angular Universal - 延迟加载问题

c# - 包名路径 - 完全限定后路径太长

c# - ASP.Net OWIN 身份验证 - 如何在浏览器选项卡关闭时删除 UseCookieAuthentication?

c# - UOM(度量单位)设计模式

javascript - 单击时包含具有不同变量值的模板文件 - Symfony2/Twig