Owin获取查询字符串参数

Fre*_*kyB 5 .net owin katana

我试图从Owin请求获取查询字符串参数.虽然此参数位于查询字符串中,但参数"test"的获取操作仍为空.如何从OWIN主机读取请求参数?

呼叫:

localhost:5000/?test=firsttest
Run Code Online (Sandbox Code Playgroud)

码:

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

jas*_*per 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();
        });
Run Code Online (Sandbox Code Playgroud)

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