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

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 | 引用: 0 | 查看次数: 4466
发表评论
登录后再发表评论!