上操作的路径模板不是有效的OData路径模板
我在我的OData控制器定义POST方法:上操作的路径模板不是有效的OData路径模板
[HttpPost]
[ODataRoute("Users/BulkUserUpdate/")]
public HttpResponseMessage BulkUserUpdate([FromBody] BulkUserUpdateModel bulkModel)
{
try
{
foreach (Guid userId in bulkModel.UserIds)
{
...
}
...
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception e)
{
...
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
当启动应用程序,我得到错误:路径模板“用户/ BulkUserUpdate /”上控制器'Users'中的操作'BulkUserUpdate'不是有效的OData路径模板。错误的请求 - 查询语法错误。
我的配置在EntityDataModel:
var userType = builder.EntitySet<UserModel>("Users").EntityType;
ActionConfiguration bulkUserUpdate = userType.Action("BulkUserUpdate");
OjamaYellow
按照OData Spec,它说:
要调用绑定到资源的作用,客户端发出一个POST请求的动作URL。可以从先前返回的实体表示获得动作URL,或者通过将名称空间或别名限定的动作名称追加到URL来标识与其类型与绑定类型相同或源自绑定类型的资源行动的参数。
所以,你[ODataRoute("Users/BulkUserUpdate/")]
有两个问题:
你应该使用命名空间限定动作名字来称呼行动。例如:
~.. /YourNameSapce.BulkUserUpdate
您的操作必须为非收集类型,因此您应该对非收集操作进行调用。
所以,正确的属性路由字符串应该是:
[ODataRoute(Users({myKey})/YourNamespace.BulkUserUpdate")]
和你的控制器方法应该有一个说法在接受“的myKey”。
public HttpResponseMessage BulkUserUpdate([FromODataUri]string myKey, [FromBody] BulkUserUpdateModel bulkModel)
=========================更新10/20/2017 ============ ===从OjamaYellow
响应:
但如果我不想在我的网址的关键。所以,其实我是想有未绑定的动作
未绑定的动作,你可以直接调用从“制造商”,“行动”的方法,例如:
ActionConfiguration actionConfig = builder.Action("xxx");
结合的作用是通过行动进口称为,按照OData Spec说:
要通过操作导入调用操作,客户端发出POST请求到标识操作导入的URL。操作导入的规范URL是服务根目录,后跟操作导入的名称。
所以,正确的属性路由字符串未绑定的动作应该是:
[ODataRoute("yourActionImportName")]
=============更新2017年10月24日==== =====
如果你想使用Users/BulkUserUpdate
,那就是绑定到实体集合的行为。
所以,在模型构造器,你应该叫:
var userType = builder.EntitySet<UserModel>("Users").EntityType;
ActionConfiguration bulkUserUpdate = userType.Collection.Action("BulkUserUpdate");
请注意userType
后 “收集” 的号召。
此外,请更改控制器中的[ODataRoute(“...”)]。 希望它可以帮助。
但如果我不想在我的网址中输入密钥会怎么样。所以我实际上想要进行无约束的操作 – OjamaYellow
请参阅2017年10月10日的更新 –
这种方式可行,但前提是路由是BulkUserUpdate,但不是如果我拥有我想要的Users/BulkUserUpdate – OjamaYellow