我正在尝试从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);
});
}
答案 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 包含查询字符串。