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

时间:2012-05-28 18:28:57

标签: c# asp.net url-rewriting

我需要一种方法来编写无扩展名的网址。我的服务器是IIS6.0版本1的共享主机。当前我使用的是UrlRewriting.Net dll,它仅支持IIS7。

我原来的网址是abc.xyz.in/Index.aspx?c=comp_Name; 我的虚拟网址是abc.xyz.in/comp_Name.aspx,但我希望它为abc.xyz.in/comp_Name

是否可以通过任何其他模块或任何其他模块。请注意我的主机是共享主机。因此,我无法自行配置IIS或强制我的管理员对其进行修改。

3 个答案:

答案 0 :(得分:1)

IIS6(及旧版本)中的自定义路由问题是,除非您要求.aspx,.ashx,.asmx文件,否则它们默认不会调用ASP.Net模块。有一些解决方案使用自定义错误来检查您尝试访问的内容,然后显示正确的页面,但这不是一个非常好的解决方案(但如果您真的想要阅读更多关于它的信息,那么有一个样本结束了在CodeProject:http://www.codeproject.com/Articles/44475/IIS-vs-ASP-NET-URL-Rewriting)。

我的建议是让你的webhost为ASP.Net添加一个通配符映射,以便它处理你网站的所有传入请求,这样你就可以编写一个合适的路由模块,他们可能没有必要,但是没有任何伤害。询问,它可以很容易地在网站上设置。如果这是不可能的,那么您应该寻找一个新的虚拟主机,它可以满足您网站的需求,而不是让您的网站适应当前的虚拟主机。

答案 1 :(得分:0)

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

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();
        }
    }
}

答案 2 :(得分:0)

如果你刚开始(或者这样做是一个选项),问题就变成你(你的主人)是否在IIS(6或7)上有ASP.Net 4。 / p>

无扩展网址是ASP.Net 4的一部分 - 这意味着您的 ASP.Net 网站(您想要无扩展网址工作)必须在ASP.net 4上运行(不是v2.x)...

... H个