【问题标题】:HttpListener - how do I send a WebException HTTP 304 "Not Modified" error back to browser?HttpListener - 如何将 WebException HTTP 304“未修改”错误发送回浏览器?
【发布时间】:2011-02-06 08:44:14
【问题描述】:

如果我使用 HttpListener,如何将 WebException 304 错误模拟回浏览器?

也就是说我收到了对我的 HttpListener 的请求,然后获得了 HttpListenerContext,那么从这一点开始,我将如何模拟/安排一个 HTTP“304 Not Modified”响应通过 HttpListenerContext 有效地发送回浏览器。回复?

编辑:

我尝试了以下操作,但是尝试将 WebException.Status 复制到 HttpWebResponse.StatusCode 时出现错误(状态代码必须恰好是三位数字)。有关如何纠正此问题的任何想法?

    catch (WebException ex)
    {
        listenerContext.Response.StatusCode = (int)ex.Status;   //ERROR: The status code must be exactly three digits
        listenerContext.Response.StatusDescription = ex.Message;
        listenerContext.Response.Close();

谢谢

【问题讨论】:

    标签: .net httpwebrequest httpwebresponse httplistener httplistenerrequest


    【解决方案1】:

    我想我有它:

        catch (WebException ex)
        {
    
    
            if (ex.Status == WebExceptionStatus.ProtocolError)
            {
                int statusCode = (int) ((HttpWebResponse) ex.Response).StatusCode;
                listenerContext.Response.StatusCode = statusCode;
                listenerContext.Response.StatusDescription = ex.Message;
                log("WARNING", uri, "WebException/ProtocolError: " + ex.GetType() + " - " + ex.Message);
            }
            else
            {
                log("ERROR", uri, "WebException - " + ex.GetType() + " - " + ex.Message);
    
            }
    
            listenerContext.Response.Close();
        }
    

    【讨论】:

    • StatusDescription 不接受 \n 因此如果 ex.Message 包含它,它的分配可能会失败。泄漏异常消息似乎也不是一个好主意——在一些不明显的情况下可能会被用作攻击媒介。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 2017-11-17
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    相关资源
    最近更新 更多