Я создал этот маршрут.net MVC маршрут по умолчанию контроллер/действие, но не по умолчанию параметры
routes.MapRoute(
name: "Survey",
url: "{controller}/{action}/{surveyid}/{userid}/{hash}",
defaults: new { controller = "Home", action = "Survey" },
constraints: new { surveyid = @"\d+", userid = @"\d+" }
);
Когда я затем перейдите к
http://localhost:3086/Home/Survey/1/1/3r2ytg
Он работает, но если я просматриваю к
http://localhost:3086/1/1/3r2ytg
не работает.
Если бы я тогда изменил маршрут как так
routes.MapRoute(
name: "Survey",
url: "{surveyid}/{userid}/{hash}",
defaults: new { controller = "Home", action = "Survey" },
constraints: new { surveyid = @"\d+", userid = @"\d+" }
);
Полная противоположность будет работать (и это имеет смысл).
Но мне любопытно, с первого маршрута, я думал, что оба URL должны работать, так как shoudl захватывает контроллер по умолчанию и действие, когда ни один не указан.
Update
В конце концов я пошел только с этим
routes.MapRoute(
name: "Survey",
url: "{surveyId}/{userId}/{hash}",
defaults: new { controller = "Home", action = "Survey" },
constraints: new { surveyId = @"\d+", userId = @"\d+" }
);
как это поведение я хотел. Тем не менее, когда я затем вызвать
@Url.Action("Survey", "Home", new
{
userId = @Model.UserId,
surveyId = survey.Id,
hash = HashHelpers.CreateShortenedUrlSafeHash(@Model.SecretString + survey.Id.ToString() + @Model.UserId.ToString())
})
Он генерирует
/Admin/Home/Survey?userId=25&surveyId=19&hash=2Norc
вместо блестящего пути. Я могу заставить его использовать Url.RouteUrl, но я подумал, что он должен был выбрать это автоматически.
Будьте осторожны, чтобы не заменить поток на контроллер по умолчанию/действие/ID, если вам это нужно. Если вы не можете это использовать. – Kristof
Altho Ответ на этот вопрос Я обновил свой пост с прямым наблюдением, которое было бы интересно узнать –