gpt4 book ai didi

c# - 人们如何在 Web API 中测试他们的 [RequireHttps] 属性?

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:57 26 4
gpt4 key购买 nike

快速版

我敢肯定,很多人在他们的 Web API 开发中的某个时刻实现了一些描述(消息处理程序、属性等)的 [RequireHttps] SSL 检查。你们如何测试它在成功和失败方面是否正常工作?

不是那么快的版本

我正在 OWIN 自托管 ASP.NET Web API 2 中开发 REST 服务。我已经成功地使用 SSL 保护了该服务并实现了自定义 [RequireHttps] 属性(派生来自 this SO question 的答案)。

如果客户端调用正确的 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],因为它似乎从来没有做任何有用的事情?

最佳答案

你想做的事无法完成。基本上,您正在尝试做与键入相同的事情

http:443//www.google.com

注意这也不起作用

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

关于c# - 人们如何在 Web API 中测试他们的 [RequireHttps] 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com