[英]How to deal with extensionless Url in ASP.Net and IIS6
我需要一種方法來編寫無擴展名的URL。 我的服務器是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或強制管理員對其進行修改。
IIS6(及更早版本)中的自定義路由問題在於,默認情況下,除非您要求提供.aspx,.ashx,.asmx文件,否則它們不會調用ASP.Net模塊。 有一些使用自定義錯誤的解決方案,該錯誤會檢查您嘗試訪問的內容,然后顯示正確的頁面,但這並不是一個很好的解決方案(但是如果您真的想了解更多信息,請查看示例在CodeProject上: http : //www.codeproject.com/Articles/44475/IIS-vs-ASP-NET-URL-Rewriting )。
我的建議是讓您的虛擬主機為ASP.Net添加一個通配符映射,以便它處理到您站點的所有傳入請求,以便您可以編寫適當的路由模塊,雖然它們不一定必須這樣做,但是在詢問中沒有任何危害,它可以輕松地在現場進行設置。 如果這是不可能的,那么您可能應該尋找一個可以滿足您站點需求的新虛擬主機,而不是使您的站點適應當前的虛擬主機。
嗨,您需要編寫自己的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();
}
}
}
如果您剛開始(或者這樣做是一種選擇),問題就變成您(您的主機)是否在IIS(6或7)上具有ASP.Net 4。
無擴展名的URL是ASP.Net 4的一部分-這意味着您的ASP.Net站點(您希望無擴展名的URL工作)必須在ASP.net 4(而不是v2.x)上運行...
嗯...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.