如何让 ASP.Net Web API 和 OData 将字符串值绑定为键?

2023-12-09

我正在浏览来自 asp.net 的简短 Web Api + OData 教程:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/getting-started-with-odata-in-web-api/create-a-read-only- odata-端点.

我下载了示例项目,它可以工作。但后来我开始玩Product他们在示例中使用的模型。我添加了一个新属性来充当字符串类型的键而不是整数键。

新的 Product.cs:

public class Product
{
    public string stringKey { get; set; }
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string Category { get; set; }
}

修改后的控制器:

public class ProductsController : EntitySetController<Product, string>
{
    static List<Product> products = new List<Product>()
    {
        new Product() { stringKey = "one", ID = 1, Name = "Hat", Price = 15, Category = "Apparel" },
        new Product() { stringKey = "two", ID = 2, Name = "Socks", Price = 5, Category = "Apparel" },
        new Product() { stringKey = "three", ID = 3, Name = "Scarf", Price = 12, Category = "Apparel" },
        new Product() { stringKey = "four", ID = 4, Name = "Yo-yo", Price = 4.95M, Category = "Toys" },
        new Product() { stringKey = "five", ID = 5, Name = "Puzzle", Price = 8, Category = "Toys" },
    };

    [Queryable]
    public override IQueryable<Product> Get()
    {
        return products.AsQueryable();
    }

    protected override Product GetEntityByKey(string key)
    {
        return products.FirstOrDefault(p => p.stringKey == key);
    }
}

问题是当我去/odata/Products(one)字符串“one”未绑定到中的关键参数GetEntityByKey(string key)行动。但是,当我浏览到odata/Products(1)那么“1”确实绑定到key争论。

如何获得具有文本值的字符串以正确绑定,而不是仅将字符串与数值绑定?

Update

我忘记包含 WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.EntitySet<Product>("Products");

        Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
        config.Routes.MapODataRoute("ODataRoute", "odata", model);
    }
}

我注意到路径 /odata/Products(0011-1100) 只会将“0011”绑定为字符串键。

经过一番尝试后,我发现以下路径如我所愿:

/odata/Products('one')

看来需要单引号才能读取括号内的整个字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 ASP.Net Web API 和 OData 将字符串值绑定为键? 的相关文章

随机推荐

  • Jvm 使用的内存比本机内存跟踪显示的要多,我如何找到额外的 meeory 的去向? [复制]

    这个问题在这里已经有答案了 我在我的网络服务器上运行 jetty 我当前的jvm设置 Xmx4g Xms2g 但是jetty使用了更多的内存 我不知道这些额外的内存去了哪里 Jetty总共使用4 547g内存 堆使用情况显示堆内存使用量为
  • ActiveRecord 在日期字段上按年、日或月查找

    我有一个具有日期属性的 ActiveRecord 模型 是否可以利用该日期属性按年 日和月查找 Model find by year 2012 Model find by month 12 Model find by day 1 或者是否可
  • 如何禁用 Kubernetes pod 的交互式会话 (kubectl exec)

    我需要禁用对 Kubernetes pod 的交互式会话 ssh 访问 它通过 RBAC 系统和 pods exec 子资源进行控制 您可以根据需要设置策略
  • 什么是合成构造函数?

    它是什么 我有一个模糊的理解 合成构造函数是由编译器隐式创建的构造函数 它也初始化其成员类对象 但可能会也可能不会满足程序实现的需要 这个定义正确吗 在什么情况下它会被合成 什么情况下不会 下面的文章比我以前能更好地回答你的问题 我引用了这
  • 在armv8架构中将半字值存储到堆栈内存中时出现总线错误?

    我有两个寄存器 w1 和 w2 我想将它们存储在堆栈上 我想将完整的单词w1和w2的一半存储到堆栈中 这是我的实现 STR w1 sp 8 STRH w2 sp 8 编译时 第一条指令运行良好 但第二条指令引发总线错误 我知道这是一些对齐问
  • Sed 和重命名文件

    我的目录中有大量文件 每个文件都有不同的名称和长度 类似的医生 218 级 1080p 30fps H264 128kbit AAC mp4另一种类型 Class 223 1080p 30fps H264 128kbit AAC mp4 e
  • 在解析大写月份名称的日期时,我得到 java.time.format.DateTimeParseException [重复]

    这个问题在这里已经有答案了 我有几行代码 如下所示 DateTimeFormatter formatter DateTimeFormatter ofPattern dd MMM yy formatter formatter withLoca
  • 替换 dask 数据框分区

    我可以将 dask 数据帧分区替换为我单独创建的另一个具有相同行数和相同结构的 dask 数据帧分区吗 如果是 怎么办 是否可以使用不同的行数 您可以使用以下命令将分区添加到 Dask 数据帧的开头或结尾dd concat功能 您可以通过切
  • 仅返回匹配的多值字段

    假设一个具有名称的多值 存储和索引字段comment 执行搜索时 我只想返回以下值comment其中包含匹配项 例如 当搜索 gold 而不是得到这个结果时
  • Django异步更新单页模板

    我有一个带有此函数的 django 视图来获取模板的数据 def get context data self kwargs context super MyView self get context data kwargs context
  • Chrome 问题 - 嵌入 Windows 媒体播放器

    我遇到问题了 我在页面中嵌入了 WMP 并且需要对播放器隐藏按钮 我可以在 IE 和 FF 中隐藏它们 但在 Google Chrome 中却做不到 这是代码
  • Google Sheets - 使用 UNIQUE 函数并显示为一行

    在 Google 表格中 在列上使用 UNIQUE 会导致所有唯一值显示在列中 有没有办法让所有值显示在行而不是列中 尝试这个 UNIQUE FLATTEN A1 D1
  • CakePHP 发送电子邮件

    我在使用 CakePHP 发送邮件时遇到问题 一切都很顺利 但我没有收到任何一封邮件 我厌倦了发送到两封不同的电子邮件 WebsitesController php App uses AppController Controller App
  • 仅返回字符串中的数字 0-9

    我需要一个可以在 VBScript 和 NET 中使用的正则表达式 它仅返回在字符串中找到的数字 例如 以下任何 字符串 应仅返回1231231234 123 123 1234 123 123 1234 123 123 1234 123 1
  • 当充气之前充气的片段时应用程序崩溃

    应用程序加载和查看EventFragment java显示地图 当您单击另一个选项卡片段时 它会很好地加载该片段 当您返回到第一个选项卡 地图 时 它会崩溃并出现以下错误 07 03 14 13 54 640 E AndroidRuntim
  • 取消异步httpweb请求

    我正在制作一个应用程序 它将制作多个 HttpWebRequest 对象并通过下载我的 htmlhttpRequest BeginGetResponse方法 我回来了IAsyncResult并将其存储在本地 以便我可以随时取消请求 但我不确
  • 安装重新缩进Python

    我在使用 Notepad 进行 Python 缩进时遇到很多问题 为了解决这个问题 我尝试安装Python redent模块 但我不知道如何使用它 如果有人成功了请告诉我 这是我尝试过的步骤 1 使用简易安装我尝试安装该软件包 C Pyth
  • Java - 每秒重新绘制组件?

    我想每秒重新绘制组件 但它不起作用 我正在尝试的是 try while true Thread currentThread sleep 1000 gc cb next gc repaint catch Exception ie 我建议使用j
  • 使用 FrontDoor 通过 Azure AD redirect_uri 进行身份验证不正确

    我有一个 Azure FrontDoor 设置作为在端口 5443 上运行的容器和自定义域之间的反向代理 负载均衡器 这样做的目的是为用户提供一个标准的地址 IE container azurecontainer io 3443 被指向ht
  • 如何让 ASP.Net Web API 和 OData 将字符串值绑定为键?

    我正在浏览来自 asp net 的简短 Web Api OData 教程 http www asp net web api overview odata support in aspnet web api getting started w