Я заметил, что мое приложение MVC создает неправильные URL при использовании:
@using (Html.BeginForm("Test", "Test"))
{
<input type="submit" value="Submit" />
}
Это сгенерированный источник HTML:
<form action="/books?action=Test&controller=Test" method="post">
Обратите внимание, что действие начинается с /книги .Это НЕПРАВИЛЬНО!
Я заметил, что Html.BeginForm всегда включает в себя начало первого веб-API, который был зарегистрирован в MapServiceRoute.(см. код ниже)
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
var builder = HttpHostConfiguration.Create();
routes.MapServiceRoute<BooksService>("books", builder);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Я потратил много времени, пытаясь выяснить, почему URL-адреса были нарушены в моем приложении, но ни к чему не привели.Затем я решил протестировать его с помощью чрезвычайно простого приложения mvc и, конечно же, проблему легко воспроизвести.Приложение mvc, на котором я это тестировал, настолько простое, насколько возможно, было создано asp mvp.Вы можете найти это здесь .Все, что я сделал, это добавил TestController и представление Views / Test / Index.cshtml.В представлении я добавил Html.BeginForm, показанный выше.Если вы запустите приложение и зайдете на тестовый контроллер, вы увидите, что URL неверен, просто наведя указатель мыши на кнопку отправки (или посмотрите на источник HTML).
Кто-нибудь знает, как избежать этой проблемы?
РЕДАКТИРОВАТЬ : Это относится к предварительному просмотру веб-API 4 (апрель 2011 г.).