C# 如何处理ASP.Net和IIS6中的无扩展Url

C# 如何处理ASP.Net和IIS6中的无扩展Url,c#,asp.net,url-rewriting,C#,Asp.net,Url Rewriting,我需要一种方法来编写无扩展URL。我的服务器是IIS6.0版本1的共享主机。目前我使用的是URLRewering.Net dll,它只支持IIS7 我的原始url是abc.xyz.in/Index.aspx?c=comp_Name; 我的虚拟url是abc.xyz.in/comp_Name.aspx,但我希望它是abc.xyz.in/comp_Name 是否可以通过任何其他模块或任何东西实现。请注意,我的主机是共享主机。因此,我既不能自己配置IIS,也不能强制我的管理员对IIS进行修改。您好,您

我需要一种方法来编写无扩展URL。我的服务器是IIS6.0版本1的共享主机。目前我使用的是URLRewering.Net dll,它只支持IIS7

我的原始url是abc.xyz.in/Index.aspx?c=comp_Name; 我的虚拟url是abc.xyz.in/comp_Name.aspx,但我希望它是abc.xyz.in/comp_Name


是否可以通过任何其他模块或任何东西实现。请注意,我的主机是共享主机。因此,我既不能自己配置IIS,也不能强制我的管理员对IIS进行修改。

您好,您需要编写自己的HttpModule。 这是一个很好的例子(): 看看这个网站,它会描述所有需要的步骤

using System;
using System.Web;


public class DavModule : IHttpModule {

    private HttpApplication context = null;

    public void Dispose() {
        context.BeginRequest -= new EventHandler(context_BeginRequest);
    }

    public void Init(HttpApplication context) {
        this.context = context;
        this.context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e) {
        HttpApplication app = (HttpApplication) sender;
        app.Response.ContentType = "text/plain";

        if (app.Request.Path.EndsWith("Help"))
            app.Server.Transfer("Help.aspx");
        else {
            app.Response.Write("Path: " + app.Request.Path);
            app.Response.End();
        }
    }
}

IIS6(和旧版本)中自定义路由的问题在于,默认情况下,除非您请求.aspx、.ashx、.asmx文件,否则它们不会调用ASP.Net模块。有一些解决方案使用一个自定义错误来检查您试图访问的内容,然后显示正确的页面,但这不是一个很好的解决方案(但如果您真的想了解更多有关它的信息,则在CodeProject:)上有一个示例)

我的建议是要求您的Web主机为ASP.Net添加一个通配符映射,这样它就可以处理到您站点的所有传入请求,这样您就可以编写一个适当的路由模块,他们可能不必这样做,但这样做并没有害处,而且可以轻松地在站点上进行设置。如果这是不可能的,那么您可能应该寻找一个新的Web主机,它可以满足您的站点的需要,而不是使您的站点适应您当前的Web主机。

如果您正在开始(或者如果这样做是一个选项),问题是您(您的主机)是否在IIS(6或7)上有ASP.Net 4

无扩展URL是-的一部分,这意味着您的ASP.Net站点(您希望无扩展URL工作)必须在ASP.Net 4(而不是v2.x)上运行


Hth…

关于IIS6,请看我的答案: