ASP.Net MVC: проблема маршрутизации, которая выдает исключение - PullRequest
0 голосов
/ 29 мая 2018

У меня есть тестовый контроллер, где у меня есть одно действие индекса, которое принимает custid в качестве аргумента.

так выглядит мой контроллер

public class TestController : Controller
{
    // GET: Test
    public ActionResult Index(int custid)
    {
        return View();
    }
}

я добавил одну дополнительную маршрутизациюоператор в файле route.config.

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "custom1",
            url: "{controller}/{id}",
            defaults: new { controller = "Test", action = "Index", custid = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

, поэтому при доступе к действию тестового контроллера с URL-адресом, например localhost: 50675 / test / 101 , возникает ошибка.сообщение об ошибке, скажем

Словарь параметров содержит пустую запись для параметра 'custid' с необнуляемым типом 'System.Int32' для метода 'System.Web.Mvc.ActionResult Index (Int32)' в'WebAPICRUD.Controllers.TestController.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

, но при доступе к действию тестового контроллера с URL-адресом, подобным localhost: 50675 / test? Custid = 101 , тогда ошибка не появляется.

, поэтому яне понимаю, какая ошибка в коде.

Что мне нужно сделать, в результате я могу выдать этот URL http://localhost:50675/test/101, который должен работать.пожалуйста, направь меня.спасибо

1 Ответ

0 голосов
/ 29 мая 2018

Ваше определение маршрута должно содержать сегмент для custid (не id), чтобы соответствовать имени параметра.Определение маршрута также должно содержать имя контроллера, чтобы сделать его уникальным

routes.MapRoute(
    name: "custom1",
    url: "Test/{custid}", // modify
    defaults: new { controller = "Test", action = "Index"}
);

Обратите внимание, что вы также можете удалить custid = UrlParameter.Optional, так как вы не хотите, чтобы он был необязательным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...