use*_*281 3 c# rest odata asp.net-web-api asp.net-web-api2
我正在使用WebApi2和OData.我想添加自定义操作,并通过GET方法使用它
GET /odata/Providers(2)/DoSth
Run Code Online (Sandbox Code Playgroud)
但我不明白它是如何工作的.这是我的一个控制器的代码:
public class ProvidersController : ODataController
{
private Entities db = new Entities();
// GET: odata/Providers
[Queryable]
public IQueryable<PROVIDER> GetProviders()
{
return db.PROVIDER;
}
//... OTHER GENERATED METHODS
//MY TEST METHOD SHOULD BE inoked: GET /odata/Providers(2)/DoSth
public int DoSth()
{
return 22;
}
}
Run Code Online (Sandbox Code Playgroud)
和WebApiConfigFile:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<PROVIDER>("Providers").EntityType.HasKey(o => o.P_ID);
//others entities ...
//my custom action without any parameters, returns int:
ActionConfiguration getTest = builder.Entity<PROVIDER>().Action("DoSth");
getTest.Returns<int>();
Run Code Online (Sandbox Code Playgroud)
/ odata/$ metadata中存在的方法
但是无法从url运行此方法(仍然显示404:"找不到与请求URI匹配的HTTP资源").
有任何想法如何改善这个问题?
在OData中,只能通过POST方法调用操作.所以只需将请求从GET更改为POST.
如果它不起作用,请在控制器中的方法中添加一个属性:
[HttpPost]
public int DoSth()
{
return 22;
}
Run Code Online (Sandbox Code Playgroud)
如果你刚开始玩OData,我建议你从OData V4开始,这是一个OASIS标准.以下是有关操作的示例:https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataActionsSample/.