Tag: katana

我如何要求Owin / Katana将标头写入输出流?

当我写回复时,Katana会跳过发送Elapsed-Time响应头。 在我第一次写入流之前,如何让它为我设置标题? 中间件#1 public override async Task Invoke(IOwinContext context) { var stopwatch = new Stopwatch(); stopwatch.Start(); await Next.Invoke(context); stopwatch.Stop(); context.Response.Headers.Add(“Elapsed-Time”, new[] {stopwatch.ElapsedMilliseconds.ToString()}); } 中间件#2 public override async Task Invoke(IOwinContext context) { await context.Response.WriteAsync(“test”); }

Owin / Katana应该取代Web API吗?

当ASP.NET MVC出现时,微软在许多地方多次宣布它不应该取代ASP.NET Web Forms。 换句话说,它只是您可能觉得有用的另一种技术,或者您可能在其他场景中使用Web窗体。 然而,随着公司进入市场,他们无法拥有技术丛林,因为这太昂贵了。 他们通常选择一种成熟的技术,坚持使用它,在它上面构建并扩展它并在其中重复使用元素以降低成本。 现在我们正试图决定从Web API迁移到Owin / Katana。 我们只是想知道我们100%搬到Owin是否可以? 我问这个问题的原因是因为我们为Web API创建了一个非常丰富的代码库,包括流式传输,压缩,身份validation,UGC规范化,I18N和L10N支持等等。 如果我们想要迁移到Owin,我们需要再次为Owin重新创建这些工具/实用程序,因为它的体系结构与Web API不同。 我们想转移到Owin,因为它是更快,更轻,自托管的服务器,似乎是微软服务技术的未来。 我们完全转移到Owin并想象通过Owin提供所有服务的未来是否安全,我们是否停止使用Web API?

为什么所需的Startup类不需要实现适当的接口,比如IStartup?

使用katana,为什么Startup类不应该实现相应的接口,例如: interface IStartup { void Configuration(IAppBuilder app); } public class MyStartup : IStartup { public void Configuration(IAppBuilder app) { … } } 我认为开发人员可以更直观地理解他们应该将WebApp.Start方法作为T参数提供什么而不是猜测和查找示例,它应该更明确: public void Start() where T : IStartup

将HttpRequestMessage转换为OwinRequest和OwinResponse转换为HttpResponseMessage

我有一个Web API消息处理程序MyHandler ,我想在OWIN管道中作为中间件运行。 所以像这样配置处理程序。 public class Startup { public void Configuration(IAppBuilder app) { app.UseHttpMessageHandler(new MyHandler()); HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( “DefaultWebApi”, “{controller}/{id}”, new { id = RouteParameter.Optional }); app.UseWebApi(config); } } 处理程序非常简单,什么都不做。 public class MyHandler : DelegatingHandler { protected override async Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { // <— breakpoint here var response […]

什么是使IIS通过Owin管道开始响应请求的过程?

如果在Visual Studio 2013中创建一个空的ASP.NET Web应用程序项目,请打开包管理器控制台并安装包Microsoft.Owin.Host.SystemWeb 添加具有配置(IAppBuilder应用程序)方法的Startup类,例如: public class Startup { public void Configuration(IAppBuilder app) { app.Run(context => context.Response.WriteAsync(“hello”)); } } 然后运行,你会看到hello出现在浏览器中。 但是,你看一下这个项目,没有任何文件的变化,即web.config,它表明正在使用Owin管道。 更重要的是,如果您具有Startup类但未安装Microsoft.Owin.Host.SystemWeb软件包,则不会运行Startup的Configuration方法。 我怀疑有一个自定义模块和处理程序参与实现所有这些,但无法找到任何有关它的文档。 我能够找到的唯一能够轻微触及这个主题的是这个 。 你是如何通过引用一些dll来改变处理请求的方式的呢?

OWIN app.use vs app.run vs app.map

Owin中的app.use , app.run , app.map什么区别? 什么时候用? 阅读文档时并不简单。

如何在使用OWIN的WebApi项目上启用Application Insights服务器遥测?

我们遇到了一堆问题(读取很长的响应时间)以及生产中的几个项目,并希望确切地看到服务器上发生了什么。 然后,我按照本文继续将Application Insights添加到我们的所有项目中。 问题是我们的两个WebAPI项目都没有将服务器数据发送到Azure门户,而所有其他项目(MVC 5)都是。 这是我在Azure上访问相应的Application Insights刀片时显示的内容: 我尝试在Azure VM中的Application Insights状态监视器中禁用并重新启用数据收集,在向API发出请求时重启IIS几次,但无济于事。 当我在MVC项目上启用它时,当我打开网站上的页面时,我几乎可以立即在Azure门户上看到数据。 当我看到我们的Azure VM没有为这些特定项目发送数据时,我尝试在我们的开发环境中设置相同的集合,该环境托管在我们自己的基础架构中,并且完全相同的情况重复出现,排除了可能性这与Azure VM中托管的项目有关。 我不确定是什么阻止这些项目向Azure发送数据,但通过查看工作项目与非工作项目,我认为它可能与我们的WebAPI项目使用新的OWIN这一事实有关管道虽然MVC是标准的MVC项目。 我检查了两个项目类型的web.config文件和bin文件夹,它们似乎被Insights Monitor正确修改(我可以看到添加到bin文件夹的相同新dll和添加到Web的相同http模块。配置)。 考虑到这一点,如何使用依赖于OWIN / Katana管道的WebAPI项目的Application Insights启用服务器端遥测? 在这种情况下,我该怎么做才能找出导致项目无法向Azure发送数据的确切原因?

OWIN为多个路由发送静态文件

我正在制作一个位于ASP.Net WebAPI之上的SPA。 我正在等待使用HTML5历史而不是#/用于历史路由但是这会给深度链接带来问题,我需要确保/和/foo/bar都返回相同的HTML文件(我的JS将呈现正确的部分SPA)。 如何让OWIN / Katana为多个不同的url返回相同的HTML文件?

validationJWT签名时的SecurityTokenSignatureKeyNotFoundException

我正在尝试为我的组织实施OpenID Connect规范。 我在测试依赖方应用程序中使用Microsoft的OpenID Connect的OWIN实现来validation我的协议实现。 我已经公开了以下元数据文档: { “issuer”: “https://acs.contoso.com/”, “authorization_endpoint”: “http://localhost:53615/oauth2/auth”, “token_endpoint”: “http://localhost:53615/oauth2/token”, “userinfo_endpoint”: “http://localhost:53615/connect/userinfo”, “jwks_uri”: “http://localhost:53615/connect/keys”, “ui_locales_supported”: [ “en-GB” ] } 签名密钥作为此文档公开: { “keys”: [ { “n”: “xpXxl3M-YkZlzQJdArO1TfOGT2no-UL4dbZ7WuSCNIsSfyGDaqUXjMMHNyq9yD3vp-NCyk8kmn7d5XqHufnceXJM8q4xTrhN3lvywdBSbR-dwXsA-B-MJVgfiK0d_z-mxP9ew2Hj9-KkWbWCzsswlWp3gZ4mB4RGutB1IRSzXVIbvZ-MtKUb6XUDU4LDb_c1xCEXWZxhR-o1a1dLfObH2hHJ-w5y6odGlKtOFx4i4h0u7-Oj5R6k5b2YXEHM0IuYeN0u0sQvrTecokntGzPrvhnKy69I7Z_az5rC5kgloh25D9lTbe4vcRU7FXlYCFYDZsT0_IkGIXRi7brOS4f1ow”, “e”: “AQAB”, “kty”: “RSA”, “use”: “sig”, “alg”: “RS256”, “kid”: “F8A59280B3D13777CC7541B3218480984F421450” } ] } 使用JwtSecurityToken类使用JwtSecurityToken类及其关联的处理程序生成标识令牌。 此代码表示如何构造令牌并将其作为响应数据的参数返回给调用系统。 var credentials = new X509SigningCredentials(cert); // My certificate. var issuedTime = DateTime.UtcNow; […]

Owin,在身份validation请求中传递自定义查询参数

我们有自己的OpenID Connect Provider。 我们希望使用Owin中间件在身份validation请求中传递自定义查询参数。 我们无法找到使用Microsoft.Owin.Security.OpenIdConnect程序集实现此方法的方法。 甚至我们也找不到如何向Authentication Request添加标准请求参数(例如“ login_hint parameter”)。 例如,Google有“ login_hint ”和“ hd ”参数( https://developers.google.com/accounts/docs/OAuth2Login#sendauthrequest ),我们希望拥有几乎相同的参数。 但我们甚至无法找到如何使用Owin将这些参数发送给Google。 试过这段代码: var googleOptions = new GoogleOAuth2AuthenticationOptions() { ClientId = “…”, ClientSecret = “…”, }; app.UseGoogleAuthentication(googleOptions); … public ActionResult ExternalLogin(string provider) { var ctx = Request.GetOwinContext(); var properties = new AuthenticationProperties(); properties.Dictionary.Add(“login_hint “, “myemail@gmail.com”); properties.Dictionary.Add(“hd”, “hd”); ctx.Authentication.Challenge(properties, provider); return […]