问题描述
我们最近将OData从v6升级到了v7,当人们访问某些应返回401或400却返回500的端点时遇到了问题。
示例。 构造动作
builder.EntityType<MyObject>().Action("CustomAction");
控制器
[AcceptVerbs("POST","PATCH","PUT")]
[Route("v1/MyObject({id})/CustomAction")]
public async Task<IHttpActionResult> CustomAction([FromODataUri] int id)
[HttpDelete]
[Route("v1/MyObject({id})/CustomAction")]
public async Task<IHttpActionResult> DeleteCustomAction([FromODataUri] int id)
当请求有效时,端点可以正常工作。但是,如果用户未通过身份验证或请求不正确,则将返回500而不是401或400。
The request must have an associated OData route name. Consider using the extension request.ODataProperties().RouteName to set a route name.
StackTrace: at Microsoft.AspNet.OData.Extensions.UrlHelperExtensions.CreateODataLink(UrlHelper urlHelper,IList`1 segments)
但是如果传递有效的访问令牌,则端点可以正常工作。
我已经尝试过使用[ODaTaroute(“ MyObject({id})/ CustomAction”))],但这不起作用,它只会导致404。
我唯一能想到的是MyObject确实有一个名为CustomActions的NonExpandable集合,是否有可能导致ODaTaroute失败?
我最终需要的是一个自定义操作,该操作可以接受非常特定的URL上的PUT,POST,PATCH,DELETE v1 / MyObject(id)/ CustomAction,在应有的情况下将返回401或400。有效的请求可以正常工作。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)