Методы действия контроллера с разными сигнатурами - PullRequest
4 голосов
/ 05 апреля 2010

Я пытаюсь получить свои URL в формате files / id . Я предполагаю, что у меня должно быть два метода Index в моем контроллере, один с параметром и один с нет Но я получаю это сообщение об ошибке в браузере ниже.

В любом случае вот мои методы контроллера:

public ActionResult Index()
{
    return Content("Index ");
}

public ActionResult Index(int id)
{
    File file = fileRepository.GetFile(id);
    if (file == null) return Content("Not Found");
    else return Content(file.FileID.ToString());
}

Обновление: сделано с добавлением маршрута. Благодаря Джеффу

Ответы [ 2 ]

5 голосов
/ 05 апреля 2010

Чтобы использовать формат URL files / id , удалите перегрузку Index без параметров и сначала добавьте этот пользовательский маршрут, чтобы он оценивался до маршрута по умолчанию:

routes.MapRoute(
        "Files",
        "Files/{id}",
        new { controller = "Files", action = "Index" }      
    );

См. Обзор маршрутизации ASP.NET MVC для ознакомления с основами сопоставления URL-адресов с методами контроллера и прекрасной статьей ScottGu URL Routing в котором есть несколько примеров, очень близких к тому, что вы хотите сделать.

4 голосов
/ 05 апреля 2010

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

public ActionResult Index(int? id){ 
    if( id.HasValue ){
        File file = fileRepository.GetFile(id.Value);
        if (file == null) return Content("Not Found");
            return Content(file.FileID.ToString());

    } else {
        return Content("Index ");
    }
}

Вам также следует прочесть Фил Хаака Как метод становится действием .

...