【问题标题】:OData Expand fails on Client Win8.1 universal app客户端 Win8.1 通用应用程序上的 OData 扩展失败
【发布时间】:2014-10-14 00:22:25
【问题描述】:

只是一个简单的问题,Win 8.1 通用类库不支持这个吗?或者如果是,任何人都可以帮助我做错什么。

http://jbsapplication.azurewebsites.net/Modules?$filter=Name%20eq%20'JBS%20Electronic%20forms'&$expand=Menus

当我从浏览器或 Fiddler 执行此操作时,我会收到正确的响应。

我在客户端视图模型类中的代码如下(使用OData Client v2代码生成的对象)

var application = new UriBuilder(ServiceBaseAddress);
var context = new Models.Application(application.Uri);

var modulesQuery = context.Modules.Expand(m=>m.Menus).Where(m => m.Name == ApplicationName);
var modules = await ((DataServiceQuery<Module>) modulesQuery).ExecuteAsync();
_currentModule = modules.FirstOrDefault();

最后一行产生如下异常

在 Microsoft.OData.Core.DLL 中发生了“Microsoft.OData.Core.ODataException”类型的第一次机会异常

附加信息:写入 JSON 响应时,必须指定用户模型,并且必须将实体集和实体类型传递给 ODataMessageWriter.CreateODataEntryWriter 方法,或者必须在正在写入的 ODataEntry 或 ODataFeed 上设置 ODataFeedAndEntrySerializationInfo。

如果我删除请求的展开部分,一切都很好,但我需要再执行一次往返以获取菜单。

Module 类的精简参考:

[Key("Id")]
public class Module: BindableBase
{
    public string Name
    {
        get { return _name; }
        set { SetProperty(ref _name, value); }
    }

    DataServiceCollection<Menu> _menus = new DataServiceCollection<Menu>(null,TrackingMode.AutoChangeTracking);

    public DataServiceCollection<Menu> Menus
    {
        get { return _menus; }
        set
        {
            _menus = value;
            OnPropertyChanged("Menus");
        }
    }
}

【问题讨论】:

    标签: c# odata win-universal-app


    【解决方案1】:

    当我忘记将扩展实体作为 EntitySet 添加到 ODataModelBuilder 中时,我遇到了您描述的问题。在你的 ASP.NET OData Web API 中试试这个:

    builder.EntitySet<Menus>("Menus");
    

    【讨论】:

    • 我发现JavaScript客户端可以很好地扩展查询,而无需ODataModelBuilder中的扩展实体;另一方面,.NET 客户端需要将扩展​​实体添加到 ODataModelBuilder。
    • @Bvrce 猜测是有道理的 - 即 JS 与 c# .net 中强类型与弱类型的差异
    【解决方案2】:

    具有 ID 属性的模型需要由客户端显式扩展,并且可扩展模型需要向构建器注册为实体集,以便自动生成的 OData 客户端能够调用 expand。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2023-04-07
      • 2019-06-05
      • 1970-01-01
      • 2013-05-18
      • 2019-11-18
      相关资源
      最近更新 更多