Вы должны быть в состоянии указать что-то вроде http://www.mydomain.com/oempartnumber/oem и http://www.mydomain.com/mypartnumber/pn. В URL-адресе должно быть что-то, что позволит вам выбрать контроллер, который вы хотите использовать, и еще больше позволит вам различать номер детали и номер детали oem (если только они не являются уникальными по отношению друг к другу. Если между oem и pn никогда не будет совпадений, вы можете получить http://www.mydomain.com/{partnumber}/pn.
RouteTable.Routes.Add(new Route
{
Url = "[query]/pn",
Defaults = new { controller="PartNumber", action = "Details" },
RouteHandler = typeof(MvcRouteHanderl)
});
Вы можете использовать некоторые хитрости с таким маршрутом, как этот:
routes.MapRoute(
"Part number",
"{partNumber}",
new { controller = "Part", action = "Display" },
new
{
partNumber = @"\d+" // part number must be numeric
}
);
Но проблема здесь в том, что номер детали OEM, который на самом деле не является номером детали (например, "ave-345"), не будет совпадать!
ОБНОВЛЕНИЕ: При чтении я заметил, что вы сказали: «Это не сайт MVC, поэтому у меня нет контроллеров!» ... О! Это меняет вещи. В этом случае вы можете проверить, существует ли каталог, куда вы вводите http://www.mydomain.com/1234, и если нет, то можете проверить его на предмет номера продукта. Это должно быть сделано в HttpModule, хотя вы можете поймать его до того, как ваша страница будет выполнена. Затем на стороне сервера вы можете направить страницу на http://www.domain.com/productdetails?pid=1234.
Взгляните сюда, чтобы понять, что: http://www.15seconds.com/Issue/020417.htm
Для этого у вас будет класс, который наследуется от IHttpModule. Затем вы можете указать метод Init
public void Init(HttpApplication application)
{
//let's register our event handler
application.PostResolveRequestCache +=
(new EventHandler(this.Application_OnAfterProcess));
}
Это указывает на ваш метод Applicaton_OnAfterProcess:
private void Application_OnAfterProcess (источник объекта, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
...
Внутри здесь вы можете указать некоторые правила о том, что вы ищете.
Я обычно делаю что-то вроде
if (!System.IO.File.Exists(application.Request.PhysicalPath)) //doesn't exist
{
//you test for your product ID here
...
//if you find it stuff it into a ProductID variable for later...
Как только вы изолируете свой идентификатор продукта, вы можете переписать URL-адрес (на стороне сервера) и направить пользователя на соответствующую страницу productDetails.aspx.
context.RewritePath("~/products/productDetails.aspx?ProductID=" + ProductID.ToString());
Таким образом, пока пользователь и Google увидят http://www.mydomain.com/1234, ваше приложение увидит http://www.mydomain.com/products/productdetails.aspx?productid=1234, и вы можете кодировать его как обычно.
Надеюсь, это то, что вы искали вместо этого!