маршрутизация и структура URL - PullRequest
2 голосов
/ 18 ноября 2010

В любом случае, я могу исключить поле идентификатора из сгенерированного URL-адреса, но при этом иметь возможность использовать значение идентификатора?Если вы берете URL-адрес StackOverflow:

/2461065/asp-net-vopros-marshrutizatsii-mvc

Можно ли отобразить этот URL без идентификатора вопроса?

1 Ответ

1 голос
/ 18 ноября 2010

Вы можете отобразить вопрос без идентификатора, но заголовок вопроса должен быть уникальным для каждого вопроса.

Также вы все равно можете использовать идентификаторы для поиска вопросов, а затем перенаправить на другой URL, который отображает только заголовок вопроса.Если вы хотите это сделать, я могу опубликовать пример.

Вот пример:

// this method finds a file from database using the id
//and passes the object with TempData
    public ActionResult InitialDetail(int id)
    {
        var question = questionRepository.GetFile(id);
        if (question==null)
            return View("NotFound");
        else
        {
            TempData["question"] = question;
            return Redirect("/questions/" + question.Name);
        }
    }


//this method uses model passed from other method and displays it
    public ActionResult Details(string questionName)
    {
        if (TempData["question"] == null)
        {
            return View("NotFound");
        }
        else
            return View("Details", TempData["question"]);
    }

Вы также должны определить маршрут, чтобы это работало

routes.MapRoute("QuestionPage", //Files/id/fileName
            "questions/{questionName}",
            new { controller = "Questions", action = "Details" } );

Добавить этот маршрут непосредственно перед маршрутом по умолчанию.Это может привести к путанице, если у вас есть маршруты для URL, начинающиеся с http://domain.com/questions.

Примечание: Возможно, это не лучшее решение.Если заголовки ваших вопросов не уникальны, вы не можете размещать ссылки с этой структурой на своей странице.Сначала он должен искать вопрос, используя ID.

...