【问题标题】:Selfhost REST / ApiController - How to do filterparameters?Selfhost REST / ApiController - 如何做过滤器参数?
【发布时间】:2021-06-07 13:24:36
【问题描述】:

我遇到了多个问题。首先是我不知道很多东西叫什么,因为它是一个“你以前从未这样做过,它需要在昨天完成”-项目。

  • 我需要创建一个 REST 服务作为 winforms 应用程序的一部分。它需要返回json。没有 html 也没有其他 webstuff,所以我不需要 ASP.Net/Core 开销。
  • 我决定使用 OWIN selfhost,因为 Self-Host ASP.NET Web API 被标记为“旧的,请改用 owin”,所以我这样做了。
  • 它不是 ASP MVC

什么有效:

我没有开始工作的是那些 ?category=searchterm 的东西。

在旧 API 中 https://docs.microsoft.com/en-us/aspnet/web-api/overview/older-versions/self-host-a-web-api 只需添加这样的方法即可显示它可以工作,我不知道如何,但它看起来像反射魔法这应该由 /api/products/?category=category 调用,在我的情况下,在 OWIN 中它不会.

public IEnumerable<Product> GetProductsByCategory(string category)
{
  return products.Where(p => string.Equals(p.Category, category,StringComparison.OrdinalIgnoreCase));
 }

我不确定我应该做什么。该文档没有显示有关如何启用它的任何内容。根据我看的地方,它被称为“查询”或“过滤器”,但搜索会导致很多不相关的东西。这叫什么?

感谢您抽出宝贵时间阅读!

【问题讨论】:

  • 那些?category=searchterm 被称为query string 和快速谷歌搜索产生this SO Q&A。但我强烈建议您实际使用 ASP.NET Core API 而不是原始 OWIN
  • GetProductsByCategory([FromQuery] string category)
  • @MindSwipe 我不明白。所以一个普通的 Get 是通过一个 ApiController 类进行反射解析来完成的,而一个带有查询字符串的 Get 的完成方式与某些应用程序配置异步处理程序完全不同?也许是语言障碍,但我不知道如何将 Q&A 答案应用于我的问题。
  • @ChrisPickford System.Web.Http 命名空间中不存在 [FromQuery] 属性,如 [FromBody] 等。这应该适用于 OWIN 还是 ASP.Net?

标签: c# owin


【解决方案1】:

惊喜,答案非常简单。

    public IEnumerable<string> Get()
    {
        // The ApiController has a property for the current request which contains the query string.
        var query = this.Request.RequestUri.Query;
        return new string[] { "value1", "value2" };
    }

特别感谢@MindSwipe,他的链接不是答案,但让我走上了正确的道路。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多