人们如何在Web API中测试他们的[RequeeHttps]属性

本文关键字:他们的 测试 RequeeHttps 属性 API Web | 更新日期: 2023-09-27 18:04:44

快速版本

我相信许多人在他们的Web API开发过程中的某个时刻已经实现了对某些描述(消息处理程序、属性等等(的[RequireHttps] SSL检查。你们如何测试它在成功和失败方面的正确性?

不太快的版本

我正在OWIN自托管ASP.NET Web API 2中开发一个REST服务。我已经成功地使用SSL保护了服务,并实现了自定义的[RequireHttps]属性(源自这个SO问题的答案(。

在客户端调用正确的URL(例如https://my.server.com/api/values(的情况下,如果我在属性定义中添加断点,调试器就会正确地中断代码(只调用基,一切都很好,正如预期的那样(。

问题是:如何演练此属性的失败场景,以便属性代码在不干扰其他服务器进程的情况下返回错误响应

我的Web API服务侦听基本地址https://+:9443/。我尝试删除s,以便连接到http://my.server.com:9443/api/values,但在大约一分钟的超时后,我得到错误响应状态502(连接失败(。我想这很公平,但我实际上希望从[RequireHttps]属性返回一个响应("SSL必需"(。

然后我尝试创建以下StartOptions对象:

var options = new StartOptions();
options.Urls.Add("https://+:9443/"); // listen on port 9443 with SSL
options.Urls.Add("http://+:80/");  // listen to standard HTTP port 80

并将其传递给WebApp,如下所示:

WebApp.Start<Startup>(options)

同样,当我连接到http://my.server.com:9443/api/values时,这不起作用,但当我连接至http://my.server.com:80/api/values时,它起作用。

然而,这不是我想做的。我的生产服务器同时承载安全(HTTPS(和不安全(端口80上的HTTP(资源,所以我的代码会拦截对其他依赖端口80的进程的合法调用,并告诉他们通过HTTPS重新连接,这是错误的。

有人能告诉我有什么选择吗?考虑到我的情况,[RequireHttps]是否有意义,因为它似乎从来没有做过任何有用的事情?

人们如何在Web API中测试他们的[RequeeHttps]属性

你想做的事情是做不到的。基本上,你试图做与键入相同的事情

http:443//www.google.com

注意这两个都不起作用

问题是,您正试图通过SSL协议端口访问http协议,而这正是失败的原因。RequireHttps的代码甚至无法执行,因为请求甚至无法通过IIS处理。