如何在Azure功能中使用OWIN?

时间:2017-09-13 08:19:40

标签: azure owin azure-functions

我们有一个使用WebAPI和OWIN构建的API。现在这意味着很多身份验证代码都使用OWIN类,尤其是OwinContext,但是当转换为在Azure Functions中运行时,您基本上已经变成了接收HttpRequestMessage的控制台应用程序。

为了不必重新实现我们的整个授权/身份验证方案,有没有办法在Azure Functions中使用OWIN?也许通过手动创建一个OwinContext或什么?

对不起,如果这个问题太宽泛,但我似乎无法理解这个问题。

1 个答案:

答案 0 :(得分:3)

  

可能通过手动创建OwinContext或其他东西?

是的,我们可以根据请求消息手动创建它。基于protocol of OWIN,我们需要将所需的键添加到Environment字典中。以下示例代码供您参考。

Dictionary<string, object> environment = new Dictionary<string, object>();

MemoryStream requestBody = new MemoryStream();
byte[] json = Encoding.UTF8.GetBytes("{ 'a' : 'value1' }");
requestBody.Write(json, 0, json.Length);
environment.Add("owin.RequestBody", requestBody);
var headers = new Dictionary<string, string[]>();
headers.Add("host",new string[] { "myhost.com" });
headers.Add("Content-Type", new string[] { "application/json" });
environment.Add("owin.RequestHeaders", headers);
environment.Add("owin.RequestMethod", "POST");
environment.Add("owin.RequestPath", "a.html");
environment.Add("owin.RequestPathBase", "/");
environment.Add("owin.RequestProtocol", "HTTP/1.1");
environment.Add("owin.RequestQueryString", "myhost.com");
environment.Add("owin.RequestScheme", "http");

OwinContext context = new OwinContext(environment);

context.Environment.Add("owin.ResponseHeaders", new Dictionary<string, string[]>());
context.Environment.Add("owin.ResponseBody", new MemoryStream());