gpt4 book ai didi

asp.net-web-api - 在 EntitySetController 中创建自定义操作

转载 作者:行者123 更新时间:2023-12-04 23:54:35 24 4
gpt4 key购买 nike

我在 .Net 4.5 中有一个 oData 应用程序。 oData 端点工作正常,但我想在 Controller 上创建一个自定义操作,以便在给定电子邮件地址时在客户记录上设置标志。

这是我的客户端代码(使用 AngularJS):

    $http({
method: 'POST',
url: '/odata/Customers/SetAlertFlag',
data: { 'email': 'test@test.com'}
}).success(function (data, status, headers, config) {
// ...
}).error(function (data, status, headers, config) {
// ...
});

这是我的服务器代码:
public class CustomersController : EntitySetController<Customer, int>
{
private DBEntities db = new DBEntities();

// ... other generated methods here


// my custom method
[HttpPut]
public Boolean SetAlertFlag([FromBody] string email)
{
return true;
}
}

服务器方法永远不会被调用。当我在浏览器中输入这个 URL http://localhost:60903/odata/Customers/SetAlertFlag我收到此错误:“检测到无效操作。'SetAlertFlag' 不是可以绑定(bind)到 'Collection([Skirts.Models.Customer Nullable=False])' 的操作。”

EntitySetController 类可以没有自定义方法吗?我还应该怎么做?

最佳答案

OData 中的操作使用特定格式,并且需要是 POST。你需要:

将操作添加到 EDM:

ActionConfiguration action = modelBuilder.Entity<Customer>().Collection.Action("SetAlertFlag");
action.Parameter<string>("email");

像这样声明 Action :
[HttpPost]
public int SetAlertFlag(ODataActionParameters parameters)
{
if (!ModelState.IsValid)
{
throw new HttpResponseException(HttpStatusCode.BadRequest);
}

string email = (string)parameters["email"];
}

调用类似这样的操作:
POST http://localhost/odata/Customers/SetAlertFlag
Content-Type: application/json

{"email":"foo"}

在这里阅读更多: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-actions

(我只是输入了这些代码片段,所以可能会有一些错误,但就是这样。)

关于asp.net-web-api - 在 EntitySetController 中创建自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com