URL作为参数被拦截
在我的 asp.net mvc 应用程序中,我想检查某个 url 是否返回有效响应。 因此,我将 url 发送到测试 HttpWebRequest.GetResponse() 的方法,
在我的开发服务器(vs2008)上它工作得很好。 然而,当部署在生产服务器上时,它会返回错误请求。 该方法永远不会被命中,并且我的 asp.net 自定义错误页面也不会被使用。
有任何想法吗?
In my asp.net mvc app I want to check if a certain url returns a valid response.
Therefor I send the url to a method that tests the HttpWebRequest.GetResponse()
On my dev server (vs2008) it works just fine.
When deployed on production server however, it returns a Bad Request.
The method is never hit and my asp.net custom error pages are not used.
any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于那些将来读过这篇文章的人:
我删除了 http:// 部分并使用 HttpUtility.UrlPathEncode 对路径进行编码,并放置了一条将最后一部分作为 {*uri} 的路由。
这使我能够在参数中使用 / 。
然后 checkUri 我通过添加 http:// 重新创建 uri,然后检查此 uri 的主机是否是我期望的主机(在我的示例中为 request.url.host)。
然后我使用我创建的 Uri 发出 httpwebrequest 并检查请求的响应。
For those who ever read this in the future:
I remove the http:// part and used HttpUtility.UrlPathEncode to encode the path and put a route up that takes the last part as {*uri}.
This enables me to use a / in the parameter.
Then the checkUri I recreate the uri by adding the http:// and then check if the Host of this uri is the host I expected (in my example the request.url.host).
Then I make the httpwebrequest with the Uri I created and check the request for a response.
也许您遇到了 ValidateRequest ASP.NET 的功能? 您可以通过修改 aspx 文件中的第一行以具有 ValidateRequest="false" 参数来对相关页面禁用此功能。
示例:
您可能不想让它保持这种状态,因为请求验证有助于防止 XSS 攻击。 如果您还没有尝试过,那么使用 HttpUtility.UrlEncode 也可能值得尝试。
Perhaps you are running into the ValidateRequest feature of ASP.NET? You can disable this for the page in question by modifying the first line in the aspx file to have the ValidateRequest="false" parameter.
Example:
You probably don't want to leave it in that state though, as the request validation helps prevent XSS attacks. Using HttpUtility.UrlEncode may also be worth trying, if you aren't already.