【发布时间】:2014-04-22 22:24:51
【问题描述】:
有谁知道[HttpGet] 属性被忽略时是否有任何特殊情况?
我有一个控制器,它上面定义了[HttpGet] 的操作,这应该意味着只允许 GET 请求,并且通常使用 404 拒绝 POST 请求。在 IIS 下本地运行此操作似乎能够接受 Http POST 请求,但是在测试服务器上,情况并非如此。看起来我们确实需要能够支持控制器操作上的 POST 请求,我们将添加对此的支持。
但是,这确实提出了一个问题,为什么我在 IIS 下运行的站点的本地副本似乎接受了请求。我希望该请求以 404 http 状态被拒绝。此外,我们在测试服务器上运行的其他站点与我的本地服务器的行为相同。
我不确定这是否与请求实际上是重定向请求有关。 “主站点/门户”是一个旧的 ASP.Net Web 窗体应用程序,然后重定向到另一个“路由”ASP.Net Mvc 3 Web 应用程序,该应用程序将根据业务逻辑将请求重新路由到其他 3 个“通道”中的 1 个ASP.Net Mvc 3 Web 应用程序。所有渠道本质上都提供相同的功能,但它们内部的业务逻辑略有不同。每个频道都有一个登陆控制器,它将用户重定向到他们应该去的页面。正是这些装载控制器上的操作具有[HttpGet] 属性。
以下是测试服务器上 3 个通道中的 1 个发生的情况:
- 用户点击按钮
- 对“门户”站点的 POST 请求导致 302 到“路由”站点
- 对“路由”站点的 POST 请求导致 302 到“通道”站点
- 对“频道”站点的 POST 请求会导致 404。
以下是测试服务器上的其他 2 个频道和我的本地服务器上的所有 3 个频道上发生的情况:
- 用户点击按钮
- 对“门户”站点的 POST 请求导致 302 到“路由”站点
- 对“路由”站点的 POST 请求导致 302 到“通道”站点
- 对“频道”网站的 POST 请求会导致 302 到“频道”网站内的目标页面。
- 对目标页面的“通道”的 POST 请求会导致 200 并且页面正在服务器中。
更新: 事实证明,我一直很好,真正地带领着花园小径。重定向请求都是通过 Http GET 而不是 Http POST 完成的,因为这是 302 重定向的正确行为。但是 IE 开发工具错误地将这些显示为 POST 请求而不是 GET 请求。原来通道服务器还没有部署到Test。
【问题讨论】:
标签: asp.net-mvc