问题标签 [asp.net-web-api-odata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WebApi OData 每个用户的财产安全
我有一些实体的数据只能供某些用户访问。
例如Bar.Secret
,只能由 访问,UserA
但不能由访问UserB
。我可以这样:
除此之外,这是一个糟糕的实现。它不包括这个控制器:
可以调用哪个/odata/Foos?$expand=Bars
,然后我可以查看Bar.Secret
. 我不能只是禁用$expand
,Foo
因为该查询是完全合法的UserA
,也是需要的。
有没有办法让 OData 针对某些涉及所请求实体的谓词验证查询。
就像是
c# - 抽象的通用 ODataController 导致“未找到 HTTP 资源”
我有这个基础 ODataController
而这个派生的控制器
我可以打得.../odata/foos(1)
很好。但是.../odata/foos
给出这个错误:
我必须创建Get()
虚拟,然后在派生控制器中覆盖它。像这样:
为什么Get()
在基本控制器中不起作用,什么时候起作用Get(1)
?
entity-framework - 如何在实体类中有两个自引用
我有一个Foo
可以有两个对自身的可选引用:ParentId
和RootId
.
有一个工作正常,但是当我介绍第二个自我引用时,我得到了错误:
无法确定类型“Model.Foo”和“Model.Foo”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。
unit-testing - 使用 XUnit 和 MOQ 进行单元测试 OData V4 PUT 操作
我的目标是在 OData v4 控制器中对 PUT 操作进行单元测试。
我正在为 Entity Framework 6 Context 和 NBuilder 使用 MOQ 来构建测试数据。
我能够成功测试 Get 和 Get(Id),但是当我从 PUT 操作中检索 HTTPActionResult 时无法运行断言。
我可以看到 HTTPActionResult 在调试模式下返回带有 Entity 属性的 UpdatedODataResult 对象,但我看不到在设计时使用它的方法。
有谁知道如何从 Async PUT 操作响应中提取返回的实体?
这是代码:
这是我的单元测试代码
asp.net-web-api - 将计算值添加到 OData 结果
我正在尝试向数据结果添加一些信息,无论用户是否具有对该实体的读取或写入访问权限。
假设我有这个实体:
保存AccessRights
用户 ID 的位置以及他们是否具有读/写访问权限。
目前我只是$expand
AccessRights 并计算用户是否在前端具有读/写访问权限。但是,我希望将此计算属性添加到结果中。
示例 json 结果:
是否有可能做到这一点?请记住,HasRead/WriteAccess
模型上不存在也不应该存在。
c# - oData 过滤器不适用于 MongoDB 和 Web API 的导航属性
控制器看起来像
在 MongoDb 存储库中,我返回集合的 AsQueryable。
MongoDB 文档看起来像
Id 是使用 ObjectId.GenerateNewId().ToString() 生成的,因此它们存储为字符串。
Node 和 NodeGroup 是纯 POCO
问题
oData URI,例如
工作正常。
但是当我尝试过滤导航属性时
它给了我例外
message: "无法确定表达式的序列化信息:ConditionalExpression。",
c# - 没有元数据操作的 Odata 不起作用
我在这里尝试了本文中描述的解决方案: 原始文章
如前所述,我做了:
一切正常,没有更多的元数据信息。标准请求工作正常,但未绑定的操作和功能不再工作,我收到 404 响应。
我将操作注册到 Odata 模型构建器,例如:
在控制器中我有:
有什么建议我可以如何实现隐藏 Odatametada 但仍然有操作/功能工作?
asp.net - 如何防止在 ASP.NET Web API OData 服务中发布不足?
我创建了一个非常简单的 OData v4 控制器。控制器基本上包含以下实体的实体框架支持的 CRUD 方法Pet
:
这里重要的Pet.Age
是不可为空的必需属性。
这是控制器本身(仅Post
显示方法):
这是我的WebApiConfig
控制器配置:
现在,如果我想Pet
在我的数据库中创建一个新的,我会发出这样的POST
请求:
但是,我可以简单地省略Age
JSON 请求负载中的属性,因此 JSON 反序列化器将使用默认值0
,而我希望400 Bad Request
返回一个状态。这个问题被称为发布不足。
使用常规 WebApi 控制器时可以轻松解决(解决方案在此处描述)。您只需创建 aPetViewModel
并使您的控制器接受 aPetViewModel
而不是实际Pet
实体:
然后在您的控制器中,您只需转换PetViewModel
为Pet
实体并像往常一样将其保存到数据库中。
不幸的是,这种方法不适用于 OData 控制器:如果我将Post
方法更改为 acceptPetViewModel
而不是Pet
,我会收到以下错误:
System.Net.Http.UnsupportedMediaTypeException:没有 MediaTypeFormatter 可用于从媒体类型为“application/json”的内容中读取“PetViewModel”类型的对象。
在 System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent 内容,类型类型,IEnumerable'1 格式化程序,IFormatterLogger 格式化程序记录器,CancellationToken 取消令牌)
在 System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent 内容,Type 类型,IEnumerable'1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)
在 System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage 请求,类型类型,IEnumerable`1 格式化程序,IFormatterLogger 格式化程序记录器,CancellationToken 取消令牌)
那么,在使用 OData 控制器时,有什么方法可以防止发布不足?
asp.net-mvc-4 - IPrincipal 应该是 ClaimsPrincipal 但是 WindowsPrincipal
我有一个控制器,上面有 3 个操作方法,其中两个是常规 OData 调用,第三个是函数。使用 Azure AD 和 ADAL 保护 WebAPI。
CustomAuthAttribute(IsAppAuthorizing 只需检查 web.config 条目)
启动.Auth.cs
控制器(ByUser 是 OData 函数,没有得到正确的 IPrincple 信息,其他两种方法工作正常)