Owin获取查询字符串参数

时间:2016-05-04 10:57:58

标签: .net owin katana

我正在尝试从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);
        });
    }

2 个答案:

答案 0 :(得分:7)

Get<T>在OWIN环境字典中查找任何键。但是,单个GET请求参数不是该字典的一部分。您可以使用req.QueryString获取完整的查询字符串,该字符串相当于req.Get<string>("owin.RequestQueryString"),并在您的情况下返回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)。

答案 1 :(得分:0)

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

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