Owin获取查询字符串参数

Owin get query string parameters

我正在尝试从 Owin 请求中获取查询字符串参数。参数 'test' 的获取操作保持为空,尽管此参数在查询字符串中。如何从 OWIN 主机读取请求参数?

致电:

localhost:5000/?test=firsttest

代码:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseHandlerAsync((req, res) =>
        {
            string paramTest = req.Get<string>("test");                             
            return res.WriteAsync(paramTest);
        });
    }

Get<T> 在 OWIN 环境字典中查找任何键。不过,各个 GET 请求参数不是该字典的一部分。您可以使用 req.QueryString 获得完整的查询字符串,在您的情况下相当于 req.Get<string>("owin.RequestQueryString") 和 returns test=firsttest 。这很容易解析。

另一种选择是这样的:

        app.Use(async (ctx, next) =>
        {
            var param = ctx.Request.Query.Get("test");
            await next();
        });

IOwinRequest 实现为您提供了经过解析的查询字符串。请注意,从 IOwinContext.Request 获得的对象实现了 IOwinRequest,而传递给 UseHandlerAsync 的对象是完全不同的类型 (Owin.Types.OwinRequest),既不提供上下文也不提供已解析的查询字符串 (afaik).

有同样的问题,这是我的解决方案。

在这个非常简单的示例 (https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api) 中,作为特定控制器基础 class 的 ApiController 有一个包含查询字符串的 属性 this.Request.RequestUri.Query .