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

标签 c# asp.net .net ssl asp.net-web-api

快速版

我敢肯定,很多人在他们的 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/

相关文章:

C#:是否可以使用标签代替带有 String.Format 的数字?

c# - C#aspnetCore否IEnumerable构造函数

c# - winsock 资源不足

c# - 对于 64 位应用程序,.NET 使用 WSAStartup 是否安全?

c# - StackoverflowException递归和执行缓慢

c# - VB6 中的复合字符串格式化(即要格式化的字符串中的 : using {0}, {1} 和 {2})

c# - 将 HTTPS 开发者证书保存到当前用户个人证书存储时出错

c# - 如何动态组合 linq 查询?

c# - 从 C# 中的另一个表单获取组合框值

asp.net - 多次发生 Web 服务错误