這不是關於IIS URL重寫。它關於ASP.NET路由。
它看起來確實很像字符串問題ID簡單地被忽略。由於它在沒有這個字符串參數的情況下工作,它可能用於用戶的方便。
在ASP.NET MVC中你有路由。如果你不太瞭解它 - 請閱讀這兩篇文章:at MSDN,at ASP.NET。
默認情況下,您有以下RouteConfig
:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional }
);
這意味着,如果你有這樣一個動作:
public class InformationController : Controller
{
public ActionResult Get(int id)
{
// ...
}
}
然後你就可以訪問它的方式如下:
http://yourwebsite.com/Information/Get/7325278
這與
相同
http://yourwebsite.com/Information/Get/?id=7325278
如果你想要一個額外的參數,你可以改變你的路線以使用2,3或更多的參數。
然後,你會做一個
http://yourwebsite.com/Information/Get/7325278/group-by-in-linq
這是一個相當於
http://yourwebsite.com/Information/Get/?id=7325278&someParam=group-by-in-linq
這裏是StackOverflow topic about routes with multiple arguments。
假設您現在有多個參數路由。 現在,您可以在行動中描述任何邏輯。例如,你可以在你的代碼中使用這個參數,或者你可以忽略第二個參數並重定向到必要的URL(StackOverflow是如何實現的)。
也許,我的僞僞代碼將幫助您:
public ActionResult Get(int id, string unnecessaryString)
{
var question = questionsDbProvider.getById(id);
if (question.ShortUrlText == unnecessaryString)
return RedirectToAction("Get", new {
id = id,
unnecessaryString = question.ShortUrlText
});
}
這樣的行動代碼將檢查它是否是第二個參數是正確的,否則重定向糾正。
301重定向正是StackOverflow所做的,它使它以這種方式工作。您可以在瀏覽器開發人員工具的「網絡」選項卡中查看它。
是的,我知道這一點,但在我的提問時指出,我不想打分貝每次在使用相同的密鑰,但用不同的幫助文件(假設關鍵是問題數量和幫助文件是用戶上下文文本),特別是當我緩存頁面。我會更新這個問題來考慮緩存。 –
@NullHead 301重定向正是StackOverflow所做的,它使它以這種方式工作。您可以在瀏覽器開發人員工具的「網絡」選項卡中查看它。您可以使用ASP.NET緩存來避免不必要的請求。 –
我在我的更新中提到過。我的問題是,從Action執行301操作有多高效? –