在我的 asp.net mvc 应用程序中,我想检查某个 url 是否返回有效响应。因此,我将 url 发送到测试 HttpWebRequest.GetResponse() 的方法
在我的开发服务器(vs2008)上它工作得很好。但是,当部署在生产服务器上时,它会返回错误请求。该方法永远不会被击中,并且我的 asp.net 自定义错误页面没有被使用。
有任何想法吗?
在我的 asp.net mvc 应用程序中,我想检查某个 url 是否返回有效响应。因此,我将 url 发送到测试 HttpWebRequest.GetResponse() 的方法
在我的开发服务器(vs2008)上它工作得很好。但是,当部署在生产服务器上时,它会返回错误请求。该方法永远不会被击中,并且我的 asp.net 自定义错误页面没有被使用。
有任何想法吗?
对于那些将来读过这篇文章的人:我删除了 http:// 部分并使用 HttpUtility.UrlPathEncode 对路径进行编码,并放置一个将最后一部分作为 {*uri} 的路由。这使我能够在参数中使用 /。
然后 checkUri 我通过添加 http:// 重新创建 uri,然后检查此 uri 的主机是否是我期望的主机(在我的示例中为 request.url.host)。
然后我使用我创建的 Uri 发出 httpwebrequest 并检查请求是否有响应。
也许您遇到了 ASP.NET的ValidateRequest功能?您可以通过将 aspx 文件中的第一行修改为具有 ValidateRequest="false" 参数来为相关页面禁用此功能。
例子:
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" ValidateRequest="false" %>
不过,您可能不想让它处于那种状态,因为请求验证有助于防止 XSS 攻击。使用 HttpUtility.UrlEncode 可能也值得尝试,如果您还没有的话。