木子屋 Dnawo's BLOG

Server.Transfer完美解决ASP.NET输出404页面

👤 dnawo 📅 2012-04-16 👁 5241 👍 0 💬 0 🔄 本站原创
1.问题描述

IIS上同一个网站绑定了两个主机名www.a.com和www.b.com,现在要求用www.a.com不能打开根目录下的default.ashx页面(即返回404),而www.b.com仍可正常访问。

2.解决方法

稍做修改后,default.ashx页面代码结构如下:

<%@ WebHandler Language="C#" Class="Default" %>

using System;
using System.Web;

public class Default : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        
        if (context.Request.ServerVariables["HTTP_HOST"].Equals("www.a.com", StringComparison.CurrentCultureIgnoreCase))
        {
            //404处理程序
            context.Response.End();
        }
        context.Response.Write("Hello,World!");
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
}

针对404处理程序,前后有三种思路:

①.Response.Status方法

context.Response.StatusCode = 404;
context.Response.Status = "404 Not Found";
context.Response.Write("<b>404 Not Found</a>");

图片

分析:非专业用户不认可这个404页面。

②.Response.Redirect方法(404.aspx在服务器不存在)

context.Response.Redirect("404.aspx");

图片

分析:虽然这是一个标准的404页面,但是页面文件明显的变成了404.aspx,而不是default.ashx。

③.Response.Transfer方法(404.aspx在服务器不存在)

context.Server.Transfer("404.aspx");

图片

分析:解决了第②个方法中存在的不足,完美的解决了ASP.NET输出404页面的问题。

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 Chrome打开https站点提示:该服务器的安全证书尚未生效解… 下一篇 → ASP.NET网站预编译工具aspnet_compiler参数-…