【问题标题】:Getting 404 after add querystring in asp.net page在 asp.net 页面中添加查询字符串后获取 404
【发布时间】:2017-02-11 22:03:00
【问题描述】:

我有一个简单的页面,该页面应该根据在查询字符串中发送的路径显示图像。添加查询字符串后,我收到 404 错误代码。

www.domain.com/ViewImage.aspx?Image=/img/image.jpg

ViewImage.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
            <td align="center" valign="baseline">
                <img alt="image" id="Img2" runat="server" class="fullimage" src="" />
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

ViewImage.aspx.cs

    protected void Page_Load(object sender, EventArgs e)
    {
        var src = Server.UrlDecode(this.Request.QueryString["Image"]);
        this.Img2.Src = validInput(src);
    }

    protected string validInput(string input)
    {
        var regex = "[\'<>\"]";
        if (null != input && !input.Contains("\"") && input.StartsWith("/"))
        {
                return !Regex.IsMatch(input, regex) ? AntiXssEncoder.XmlAttributeEncode(input):string.Empty;
        }
        return string.Empty;
    }

预期结果

<img alt="image" id="Img2" runat="server" class="fullimage" src="/img/image.jpg" />

当前结果 error 404


这是我尝试并检查的:

验证页面存在

www.domain.com/ViewImage.aspx 工作正常,没有设置 src 图像,但可以正确找到页面。

验证图片存在

www.domain.com/img/image.jpg 工作正常,img 显示正确。

尝试了错误的路径

www.domain.com/ViewImage.aspx?Image=/asdasdas/asdas.jpg 我没有收到 404 错误,并且 Image src 设置正确

只尝试了文件夹,url 中没有图片

www.domain.com/ViewImage.aspx?Image=/img,这不会出现 404 错误,但如果添加最后一个斜杠,我也会收到 404 错误。

www.domain.com/ViewImage.aspx?Image=/img/

最后一个 url 出现 404 错误。

注意事项

  • 我们在服务器中使用 SSL (https),​​不确定这是否重要。
  • 我认为该错误可能/应该在 IIS 配置中修复,但不确定是什么或如何修复。

有什么建议吗?

【问题讨论】:

  • 你是UrlDecoding你还没有UrlEncoded
  • 你能试试这个吗:www.domain.com/ViewImage.aspx?Image=%2Fimg%2Fimage.jpg
  • 嗨@sachin,感谢您的回答。我刚试过,这也是 Jacob 的建议,但不起作用。
  • 您的 IIS 配置或web.config 中可能存在异常情况;这些细节可能会有所帮助。

标签: c# asp.net .net webforms


【解决方案1】:

要记住的一点是,查询字符串值中的/ 不受支持,尽管在 URL 中输入它时,某些浏览器可能会为您找出编码。路径应该是 URI 编码的(%2F,而不是/)。您的服务器配置可能是这样的,其中/ 被用于某种导致 404 的路径解析;如果您的查询字符串没有格式错误,您可能没有这个问题。

您还可以稍微简化代码。 Request.QueryString 自动解码参数,因此您不必手动进行:

protected void Page_Load(object sender, EventArgs e)
{
    // The query string is automatically decoded
    var src = this.Request.QueryString["Image"]; 
    this.Img2.Src = validInput(src);
}

protected string validInput(string input)
{
    var regex = "[\'<>\"]";
    if (null != input && !input.Contains("\"") && input.StartsWith("/"))
    {
        return !Regex.IsMatch(input, regex) ? AntiXssEncoder.XmlAttributeEncode(input):string.Empty;
    }
    return string.Empty;
}

【讨论】:

  • 感谢您的回答,我只是尝试将 / 替换为 %2F 但不起作用,实际上很奇怪,当我使用 ViewImage?Image=/asdasdas/asdasd.jpg 时,图像对象中的 src 设置正常,图像未找到但具有 src 值。顺便说一句,感谢Request.QueryString 提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
相关资源
最近更新 更多